【发布时间】:2011-09-08 18:39:43
【问题描述】:
我试图在同一个窗口中绘制两种类型的图(即线图和散点图)。折线图(第一个图)中绘制的数据是代表气候指数(Y)与小数年(X)的浮动数值。我想成为“分散”的第二个图大致相同,但浮动数值表示流(Y)与小数年(X)。我尝试通过使用双 x 轴和第二个寄生 y 轴作为散点图来完成此操作:
import mpl_toolkits
from mpl_toolkits.axes_grid1 import host_subplot
import matplotlib.pyplot as plt
host = host_subplot(111)
par = host.twinx()
host.set_xlim(1880, 2020)
host.set_ylim(-5, 10)
host.set_xlabel("Time")
host.set_ylabel("PDSI Region 01")
par.set_ylabel("Minimum 10% Annual 7-day Non-exceedance Flow (cfs)")
x1 = timearray
y1 = pdsiarray01
x2 = upAmm_yr
y2 = upAmm_min
p1, = host.plot(x1, y1, label="PDSI01")
p2, = par.scatter(x2, y2, label="Annual Lowflow Upper Amm")
par.set_ylim(30, 60)
host.legend()
host.axis["left"].label.set_color(p1.get_color())
par.axis["right"].label.set_color(p2.get_color())
plt.draw()
plt.show()
我得到错误代码:
TypeError: cannot perform reduce with flexible type
当我将 scatter 替换为以 p2 开头的行中的 plot 时,此代码可以正常工作,但会生成第二个线图。我希望它分散的最终原因是第二个数据集中要绘制的点要少得多,而连接它们的线会分散注意力并且“混乱”(当我只需要突出显示某个时刻时)。条形图而不是散点图也可以。任何建议或帮助将不胜感激!
【问题讨论】:
-
相关:stackoverflow.com/questions/1746312/… 尝试确保您的两个数组都具有正确的数据类型。您是否尝试将 y2 数组的元素转换为浮点数?
-
如果您只是想要绘图的圆形标记,请不要使用
scatter,只需使用plot并指定没有线条连接它们的圆形标记。 (例如par.plot(x2, y2, 'o')或更详细的par.plot(x2, y2, linestyle='none', marker='o')。Scatter 旨在根据第三个和第四个变量改变标记的颜色和/或大小。它返回一个与Line2D不同(并且更灵活)的集合plot返回的艺术家。没有理由使用 scatter 除非您需要根据另一个变量来改变颜色或大小。
标签: python matplotlib scatter