【发布时间】:2020-10-22 07:46:07
【问题描述】:
目前我的代码是这样的:
df = pd.read_csv("Table.csv")
x=df['Fe']
y=df['V']
z=df['HIP'] #here, is a column of strings
rect_scatter = [left, bottom, width, height]
fig=plt.figure(figsize=(10, 8))
ax_scatter = plt.axes(rect_scatter)
ax_scatter.tick_params(direction='in', top=True, right=True)
# the function that separates the dots in different classes:
classes = np.zeros( len(x) )
classes[(z == 'KOI-2')]= 1
classes[(z == 'KOI-10')]= 1
classes[(z == 'KOI-17')]= 1
classes[(z == 'KOI-18')]= 1
classes[(z == 'KOI-22')]= 1
classes[(z == 'KOI-94')]= 1
classes[(z == 'KOI-97')]= 1
# create color map:
colors = ['green', 'red']
cm = LinearSegmentedColormap.from_list('custom', colors, N=len(colors))
# the scatter plot:
scatter = ax_scatter.scatter(x, y, c=classes, s=10, cmap=cm)
lines, labels = scatter.legend_elements()
# legend with custom labels
labels = [r'Hypatia', r'CKS']
legend = ax_scatter.legend(lines, labels,
loc="upper left", title="Stars with giant planets")
ax_scatter.add_artist(legend)
ax_scatter.set_xlabel('[Fe/H]')
ax_scatter.set_ylabel('[V/H]')
但是,除了我设置为 classes=1 的这 7 个值之外,我的数据还有很多值。因此,当我绘制散点图时,这 3 个值与其他数百个值重叠。如何让这 7 个点出现在情节中其他点的前面?有没有办法让一个类优先于另一个类?
【问题讨论】:
-
您可以再次致电
ax.scatter(x[classes == 1], y[classes == 1], c=classes[classes == 1], s=10, cmap=cm),但只能将您想要的课程放在首位。 Matplotlib 按调用顺序绘制点(也可以使用zorder更改)。如果您想以透明度 (alpha=...) 进行绘图,您可能需要先绘制所有“背景”点,然后再绘制您想要在顶部的点。为了让它们更加突出,您可以在第二次调用scatter时使用更大的尺寸。在这种情况下,如果您省略 cmap 并直接使用颜色,这一切都会变得更容易。
标签: python pandas matplotlib scatter-plot