Python 在同一窗口中绘制多种类型的绘图(直线、散点、条形等)
我试图在同一窗口中绘制两种类型的图(即直线图和散点图)。线形图(第一个图)中绘制的数据是代表气候指数(Y)与十进制年份(X)的浮动数值。第二个图,我想是一个'分散'是大致相同的,但与浮动数值代表水流(Y)与十进制年(X)。我试图通过使用一个双x轴和另一个寄生y轴作为散点图来实现这一点:Python 在同一窗口中绘制多种类型的绘图(直线、散点、条形等),python,matplotlib,scatter,Python,Matplotlib,Scatter,我试图在同一窗口中绘制两种类型的图(即直线图和散点图)。线形图(第一个图)中绘制的数据是代表气候指数(Y)与十进制年份(X)的浮动数值。第二个图,我想是一个'分散'是大致相同的,但与浮动数值代表水流(Y)与十进制年(X)。我试图通过使用一个双x轴和另一个寄生y轴作为散点图来实现这一点: import mpl_toolkits from mpl_toolkits.axes_grid1 import host_subplot import matplotlib.pyplot
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
当我在以p2开头的行中用plot替换散点时,这段代码可以正常工作,但会生成第二个线图。我希望它分散的最终原因是,在第二个数据集中要绘制的点要少得多,连接它们的线会分散注意力并且“凌乱”(当我只需要突出显示某个瞬间时)。用条形图代替散点图也可以。任何建议或帮助都将不胜感激 fI无法重现您的确切错误,但我认为您不需要在
p2
之后加逗号,因为分散
只返回一个值。更改后,您的代码对我有效,除了p2
是一个没有get\u color
方法的代码。您需要将其更改为p2.get\u facecolor()
或其他内容。为什么不在这两种情况下都使用plot
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# Generate some random data
time = mdates.drange(datetime.datetime(2010, 1, 1),
datetime.datetime(2011, 1, 1),
datetime.timedelta(days=5))
y1 = np.cumsum(np.random.random(time.size) - 0.5)
y2 = np.cumsum(np.random.random(time.size) - 0.5)
y2 = y2 * 20 + 10
# Plot things up...
fig = plt.figure()
host = fig.add_subplot(111)
par = host.twinx()
host.set_ylabel('One Thing')
par.set_ylabel('Another')
line1, = host.plot(time, y1)
line2, = par.plot(time, y2, 'go')
host.legend([line1, line2], ['Item 1', 'Item 2'])
host.xaxis_date()
plt.show()
相关:尝试确保两个阵列的数据类型正确。您是否尝试将y2数组的元素强制转换为浮点数?如果您只是想在绘图中使用圆形标记,请不要使用
scatter
,只需使用plot
,并指定圆形标记,而不使用线连接它们。(例如,par.plot(x2,y2,'o')
或更详细地par.plot(x2,y2,linestyle='none',marker='o')
。散布用于根据第三个和第四个变量改变标记的颜色和/或大小。它返回的集合不同(且更灵活)比Line2D
艺术家返回的plot
更高。除非您需要根据另一个变量改变颜色或大小,否则没有理由使用散布。谢谢--我对这一点不熟悉,您的评论和回答真的很有帮助!