Sem*_*aki 5 python matplotlib scatter-plot
我有一些玩具数据的散点图。
我想在给定点旁边绘制一个带有该点颜色的标签。
玩具示例:
x = 100*np.random.rand(5,1)
y = 100*np.random.rand(5,1)
c = np.random.rand(5,1)
fig, ax = plt.subplots()
sc = plt.scatter(x, y, c=c, cmap='viridis')
# I want to annotate the third point (idx=2)
idx = 2
ax.annotate("hello", xy=(x[idx],y[idx]), color='green',
xytext=(5,5), textcoords="offset points")
plt.show()
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式获得这一点的颜色,并改变我的color='green'部分color=color_of_the_point
如何获得散点图中点的颜色?
颜色矢量c将转换为颜色图,并且还可以进行其他修改,例如归一化或alpha值。
SC拥有访问点的坐标的方法:
sc.get_offsets()
Run Code Online (Sandbox Code Playgroud)
因此,也有一种获取点颜色的方法是合乎逻辑的,但我找不到这种方法。
散点图是PathCollection另一个答案中提到的。它有一个get_facecolors()方法可以返回用于渲染每个点的颜色。但是,只有在渲染散点图后才会返回正确的颜色。所以,我们可以先触发 aplt.draw()然后使用get_facecolors()。
工作示例:
import matplotlib.pyplot as plt
import numpy as np
x = 100*np.random.rand(5)
y = 100*np.random.rand(5)
c = np.random.rand(5)
fig, ax = plt.subplots()
sc = ax.scatter(x, y, c=c, cmap='viridis')
idx = 2
plt.draw()
col = sc.get_facecolors()[idx].tolist()
ax.annotate("hello", xy=(x[idx],y[idx]), color=col,
xytext=(5,5), textcoords="offset points")
plt.show()
Run Code Online (Sandbox Code Playgroud)
这产生
散点图是a PathCollection,它是子类ScalarMappable。甲ScalarMappable有一个方法to_rgba。这可用于获取与颜色值相对应的颜色。
在这种情况下
sc.to_rgba(c[idx])
Run Code Online (Sandbox Code Playgroud)
请注意,问题中使用的数组是2D数组,通常是不希望的。所以一个完整的例子看起来像
import matplotlib.pyplot as plt
import numpy as np
x = 100*np.random.rand(5)
y = 100*np.random.rand(5)
c = np.random.rand(5)
fig, ax = plt.subplots()
sc = plt.scatter(x, y, c=c, cmap='viridis')
# I want to annotate the third point (idx=2)
idx = 2
ax.annotate("hello", xy=(x[idx],y[idx]), color=sc.to_rgba(c[idx]),
xytext=(5,5), textcoords="offset points")
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |