Reputation: 23
Iam trying to create a line plot from column 1 of an array. The marker of the line plot should change if a certain condition in column 2 of the same array is full filled (marker='o' if condition is full filled, marker='x' if the condition is false. However, the result of my plot is incorrect.
import numpy as np
import matplotlib.pyplot as plt
import random
###These are 100 random numbers
randomlist = random.sample(range(0, 100), 100)
###This is an array with 50 rows and 2 columns
arr = np.array(randomlist)
arr_re = arr.reshape(50,2)
### This is a lineplot of column 1 with different markers dependent on the value of column 2
figure, ax = plt.subplots(figsize=(13, 6))
for i in range(0,50,1):
#figure, ax = plt.subplots(figsize=(13, 6))
if arr_re[i,1] > 50:
ax.plot(arr_re[i,0], color="black", marker='o', label='1880-1999')
else:
ax.plot(arr_re[i,0], color="black", marker='x', label='1880-1999')
plt.show()
Maybe someone could give me a hint. Cheersicorrect_result plot should look like this, however with changing markers according to the condition of column2
Upvotes: 2
Views: 3944
Reputation: 209
The main problem of your code above is that you forgot to add an x-value to the plot function. A way to achieve what you aim is to first plot the line of random points and then plot a scatter of the points with varying marker. See my adjustments to your code below.
import numpy as np
import matplotlib.pyplot as plt
import random
###These are 100 random numbers
randomlist = random.sample(range(0, 100), 100)
###This is an array with 50 rows and 2 columns
arr = np.array(randomlist)
arr_re = arr.reshape(50,2)
### This is a lineplot of column 1 with different markers dependent on the value of column 2
figure, ax = plt.subplots(figsize=(13, 6))
# plot column 1
plt.plot(arr_re[:,0])
# scatter plot the markers based on a condition
for i in range(0,50,1):
if arr_re[i,1] > 50:
ax.scatter(i,arr_re[i,0], color="black", marker='o', label='1880-1999')
else:
ax.scatter(i,arr_re[i,0], color="black", marker='x', label='1880-1999')
plt.show()
The result is:
Upvotes: 4