题:

使用此数据和以下代码创建一个绘图,该绘图显示nlargest列中'# of Trades'值的水平线。

我们如何将这些nlargest值显示为点(散点图是否正确?),该点位于观察到nlargest值的区域而不是水平线?

数据:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

df = pd.read_csv('for_stack_nums.csv')


axnum = df[['High','Low']].plot()
axnum.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))

for idx, l in df.nlargest(5, '# of Trades').iterrows():
    plt.axhline(y=l['High'], color='r')
    plt.axhline(y=l['Low'], color='b')
    plt.show()


python - 使用点而不是水平线和更细的y轴值修改图-LMLPHP

所需的输出:

该图显示了现有的df[['High','Low']].plot(),但水平线已由点代替,并且y轴值以.05(而不是目前的.2)的步长递增。
如果点的大小可以相对于最大值等级,那将是很好的。因此,最大的价值就是最大的点。

最佳答案

根据评论修改答案

axnum = df[['High','Low']].plot()
axnum.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
axnum.yaxis.set_major_locator(ticker.MultipleLocator(.05))

data = df.nlargest(5, '# of Trades')[['High', 'Low']]
plt.scatter(data.index, data.High, color='r', s=np.linspace(50, 10, 5))
plt.scatter(data.index, data.Low, color='b', s=np.linspace(50, 10, 5))


python - 使用点而不是水平线和更细的y轴值修改图-LMLPHP

您需要创建一个散点图。这是一些简单的代码,可以帮您完成。

import matplotlib.ticker as ticker

axnum = df[['High','Low']].plot()
axnum.yaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
axnum.yaxis.set_major_locator(ticker.MultipleLocator(.05))

x = np.linspace(0, len(df), 10)
for i, (idx, l) in enumerate(df.nlargest(5, '# of Trades').iterrows()):
    plt.scatter(x, y=[l['High']]*len(x), color='r', marker='o', s=(5-i) * 5 + 5)
    plt.scatter(x, y=[l['Low']]*len(x), color='b', marker='o', s=(5-i) * 5 + 5)


python - 使用点而不是水平线和更细的y轴值修改图-LMLPHP

关于python - 使用点而不是水平线和更细的y轴值修改图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41452231/

10-12 23:34