user15634516
user15634516

Reputation: 23

Line plot with different markers if condition is true python 3

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

Answers (1)

boxhot
boxhot

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:

enter image description here

Upvotes: 4

Related Questions