我想绘制带有x和y值的点,并根据相应的时间值为它们着色。数据存储在数据帧中。
解决方案应该是matplotlib的Alias
函数的c
参数,但是由于某种原因,它对我不起作用。
times-column是一个介于0到3之间的浮点值的列表。
绘制没有scatter
参数的点是可行的。
c
这里出现ValueError:'c'参数包含1698个元素,不适用于大小为1的'x',大小为1的'y'。
我想绘制带有x和y值的点,并根据相应的时间值为它们着色。数据存储在数据帧中。
解决方案应该是matplotlib的Alias
函数的c
参数,但是由于某种原因,它对我不起作用。
times-column是一个介于0到3之间的浮点值的列表。
绘制没有scatter
参数的点是可行的。
c
这里出现ValueError:'c'参数包含1698个元素,不适用于大小为1的'x',大小为1的'y'。
尝试一下
import matplotlib.pyplot as plt
c=list(df_result_local['times'])
x = []
y = []
for i in range(len(df_result_local['Points'])):
x.append(df_result_local['Points'][i].x)
y.append(df_result_local['Points'][i].y)
plt.scatter(df_result_local['Points'][i].x,df_result_local['Points'][i].y,c=c,alpha = 0.5)
,
我认为您也需要在c
上使用索引。所以
plt.scatter(df_result_local['Points'][i].x,c=c[i],alpha = 0.5)
,
将matplotlib.pyplot导入为plt plt.scatter需要x,y和c的数组。 数组c需要介于0和1之间的值。
scatter
还需要一个颜色图,例如cmap='viridis'
或cmap='Blues'
。
这是一个简化的示例:
c = [0.0,0.1,0.2,1.2,2.9]
c = [x/3.0 for x in c] # make sure values are between 0 and 1
points = [(0,1),(1,2),(2.5,1.5),(0.5,1.7),(1.1,1.2) ]
pnt_x = [pnt[0] for pnt in points]
pnt_y = [pnt[1] for pnt in points]
plt.scatter(pnt_x,pnt_y,cmap='viridis',alpha = 0.5)
plt.show()
我认为将其调整为适合您的格式并添加断言以确保所有数组都具有相同的长度,如下所示:
c = [x/3.0 for x in df_result_local['times'] ]
pnt_x = [pnt.x for pnt in df_result_local['Points']]
pnt_y = [pnt.y for pnt in df_result_local['Points']]
assert len(c) == len(pnt_x),"same number of colors as points needed"
assert len(pnt_x) == len(pnt_y),"same number of x as y coordinates needed"
plt.scatter(pnt_x,alpha = 0.5)
如注释中所述,严格地划分为0..1范围不是必需的。如果不这样做,则matplotlib将值标准化。请注意此自动归一化,因为默认情况下会将默认值归一化为0,将最大值归一化为1。一旦您仅使用0到1.5之间的值进行绘图,然后又想与0到3之间的值进行比较,则对应的点将不会具有相同的颜色。