Python/matplotlib:如何更改图中每个第 n 个数据点的颜色和/或符号?

我使用 Python 的经验非常基础。我已经编写了 Python 代码来从外部文件导入数据并执行计算。我的结果看起来像这样(除了实际上要大得多)。


1   1       

1   1957    

1   0.15        

2   346 

2   0.90

2   100

3   1920

3   100

3   40

我想要做的是将这两列绘制为一个系列,然后根据特定模式区分每个数据点。我知道这听起来不必要地复杂,但这是我需要做的事情来帮助那些将使用我的代码的人。不幸的是,我的 Python 技能在这里让我失望了。进一步来说:


1.第一列有“1”、“2”或“3”。所以首先我想把所有的“1”数据点都画成圆圈(例如),所有的“2”数据点都画成其他符号,“3”数据点也是如此。


2.接下来。每个不同的数字有三行。所以对于“1”,第二列的“0.15”是平均值,“1957”是最大值,“1”是最小值。我想让与每个数字的平均值(每个数字的第一行)相关联的数据点变为绿色(例如)。我希望最大值和最小值也有自己的颜色。


所以我最终会得到一个只显示一个系列的图,但每个数据点看起来都不同。如果有人能指出正确的方向,我将不胜感激。如果我没有说清楚,请告诉我,我会再试一次!


慕沐林林
浏览 98回答 2
2回答

一只萌萌小番薯

对于不同的标记样式,您当前需要创建不同的绘图实例(请参阅此 github 问题)。可以通过将数组作为color参数传递来使用不同的颜色。例如:import matplotlib.pyplot as pltimport numpy as npdata = np.array([    [1, 0.15],    [1, 1957],    [1, 1],    [2, 346],    [2, 0.90],    [2, 100],    [3, 1920],    [3, 100],    [3, 40],])x, y = np.transpose(data)symbols = ['o', 's', 'D']colors = ['blue', 'orange', 'green']for value, marker in zip(np.unique(x), symbols):    mask = (x == value)    plt.scatter(x[mask], y[mask], marker=marker, color=colors)plt.show()

米脂

我要做的是将数据分成三个不同的列,这样你就有了几个系列。然后我会使用带有不同标记的 plt.scatter 来获得所需的效果。import matplotlib.pyplot as pltimport numpy as np# Fixing random state for reproducibilitynp.random.seed(19680801)N = 100r0 = 0.6x = 0.9 * np.random.rand(N)y = 0.9 * np.random.rand(N)area = (20 * np.random.rand(N))**2&nbsp; # 0 to 10 point radiic = np.sqrt(area)r = np.sqrt(x ** 2 + y ** 2)area1 = np.ma.masked_where(r < r0, area)area2 = np.ma.masked_where(r >= r0, area)plt.scatter(x, y, s=area1, marker='^', c=c)plt.scatter(x, y, s=area2, marker='o', c=c)# Show the boundary between the regions:theta = np.arange(0, np.pi / 2, 0.01)plt.plot(r0 * np.cos(theta), r0 * np.sin(theta))plt.show()来源:https ://matplotlib.org/3.1.1/gallery/lines_bars_and_markers/scatter_masked.html#sphx-glr-gallery-lines-bars-and-markers-scatter-masked-py
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python