python - 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”是最小值。我想将与每个数字的平均值(每个数字的顶行)关联的数据点设为绿色(例如)。我希望最大值和最小值也有自己的颜色。
所以我最终会得到一个只显示一个系列的图,但每个数据点看起来都不同。如果有人能指出我正确的方向,我将不胜感激。如果我没有说清楚,请告诉我,我会再试一次!
解决方案
我要做的是将数据分成三个不同的列,这样你就有了几个系列。然后我会使用带有不同标记的 plt.scatter 来获得所需的效果。
代码
import matplotlib.pyplot as plt
import numpy as np
# Fixing random state for reproducibility
np.random.seed(19680801)
N = 100
r0 = 0.6
x = 0.9 * np.random.rand(N)
y = 0.9 * np.random.rand(N)
area = (20 * np.random.rand(N))**2 # 0 to 10 point radii
c = 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()
推荐阅读
- autodesk-forge - 如何从 revit 插件或使用 Forge api 为 Revit 文件创建 URN
- android - SQLite 在哪里
- google-cloud-platform - 允许部署管理器 jinja 模板上的所有防火墙规则
- python - 有没有办法让形成的线条图像在 imshow/pcolormesh 中看起来更平滑
- vba - Word 的宏:隐藏以某些单词开头的行
- embedded - 如何为网表综合定义自定义单元?
- r - 无法使用 ShinyApp 中的 SelectInput 按钮选择多列
- c - 直接在位码文件上使用 Clang 静态分析器
- php - 点击时如何在wordpress中调用codeigniter控制器
- bash - 如何使用 bash 脚本在远程主机上执行命令