问题
I am trying to create a scatter plot for a csv file in python which contains 4 columns x
, y
, TL
, L
. I am supposed to plot x
versus y
and change the color of the marker based on the class ID
in the TL
column which I have achieved in the below code.
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df=pd.read_csv('knnDataSet.csv')
df.columns=['SN','x','y','TL','L']
color=['red','green','blue']
groups = df.groupby('TL')
fig, ax = plt.subplots()
for name, group in groups:
ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name)
ax.legend()
plt.show()
Also, I need to change the shape depending on whether the marker has a label in the L
column or not, but I dont know how to update my code to fit this requirement.
Here is the link for the knnDataSet.csv
file:
knnDataSet.csv
回答1:
You probably want something like this:
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
df=pd.read_csv('knnDataSet.csv')
df.columns=['SN','x','y','TL','L']
color=['red','green','blue']
groups = df.groupby('TL')
fig, ax = plt.subplots(figsize=(11,8))
for name, group in groups:
for x in group.values:
if np.isnan(x[4]):
ax.plot(x[1], x[2], marker='x', linestyle='', ms=12)
else:
ax.plot(x[1], x[2], marker='o', linestyle='', ms=12)
#ax.legend()
plt.show()
If a label in the L column is NOT defined then the marker will be X
If a label in the L column IS defined then the marker will be O
Output:
来源:https://stackoverflow.com/questions/39692554/how-to-change-the-shape-of-the-marker-depending-on-a-column-variable