根据限制/条件更改散点的颜色
Posted
技术标签:
【中文标题】根据限制/条件更改散点的颜色【英文标题】:Change color of scatter points depending on limits/condition 【发布时间】:2022-01-13 20:43:06 【问题描述】:我正在从一个 excel 文件创建绘图,如使用 pandas 所示:
这是我正在使用的代码:
ax1.plot(data2["E_x"], data2["E_y"], '--', color ='black', linewidth=2, label="Equi")
ax1.plot(data2["X"], data2["Y"], 'o', color ='black', markersize=8, label="Spinal Cord")
ax1.hlines(y=4500, xmin=0, xmax=4500, color ='black')
ax1.vlines(x=4500, ymin=0, ymax=4500, color ='black')
ax1.set_xlim([0,5000])
ax1.set_ylim([0,5000])
我想将实线 (
提前致谢!
链接到sample data。
【问题讨论】:
【参考方案1】:如果您使用散点图(相对于没有线条的线图),您可以使用 c
关键字为每个点指定颜色列表。然后,根据您想要的任何标准,使用每个数据点的列表推导很容易生成关键字列表。
您甚至可以使用 pandas 内置的绘图功能。
所以不是这一行
ax1.plot(data2["X"], data2["Y"], 'o', color ='black', markersize=8, label="Spinal Cord")
使用
data2.plot.scatter(x = 'X',
y = 'Y',
c = ['r' if x else 'g' for x in (data2.X < 4500) & (data2.Y < 4500)],
ax = ax1
)
如果你愿意,你仍然可以直接使用 matplotlib
ax1.scatter(x = 'X',
y = 'Y',
c = ['r' if x else 'g' for x in (data2.X < 4500) & (data2.Y < 4500)],
data = data2
)
这两个都应该在边界内绘制红色,在边界外绘制绿色。
【讨论】:
感谢您的回复。这是我用来格式化图中点的最终代码: data2.plot.scatter(x = "X", y="Y", ax = ax1, c = ['b' if x else 'r'对于 x in (data2.X 【参考方案2】:使用过滤器时,应为 x 和 y 使用相同的过滤器。这样,两者保持相同的长度。您可以使用~
与给定过滤器相反。这是一个例子:
from matplotlib import pyplot as plt
import numpy as np
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.plot([0, 5000], [0, 5000], '--', color='black', linewidth=2, label="Equi")
x = np.random.uniform(500, 5000, 50)
y = x + np.random.normal(0, 300, len(x))
filter = (x < 4500) & (y < 4500)
ax1.plot(x[filter], y[filter], 'o', color='lime', markersize=8, label="Spinal Cord")
ax1.plot(x[~filter], y[~filter], 'o', color='crimson', markersize=8, label="Spinal Cord")
ax1.hlines(y=4500, xmin=0, xmax=4500, color='black')
ax1.vlines(x=4500, ymin=0, ymax=4500, color='black')
ax1.set_xlim([0, 5000])
ax1.set_ylim([0, 5000])
plt.tight_layout()
plt.show()
【讨论】:
以上是关于根据限制/条件更改散点的颜色的主要内容,如果未能解决你的问题,请参考以下文章