【问题标题】:Scatterplot of two Pandas Series, coloured by date and with legend两个熊猫系列的散点图,按日期着色并带有图例
【发布时间】:2017-02-24 23:13:42
【问题描述】:

我正在研究熊猫系列格式的金融时间序列。为了比较两个系列,我做了一个散点图,为了可视化散点图中的时间演变,我可以给它们上色。这一切都很好。

我的问题与显示颜色的图例有关。 我希望图例显示颜色对应的日期/年份,而不仅仅是数据条目的索引,就像现在一样。但我无法做到这一点,或者在 stackoverflow 上找到这样的问题。

我知道时间序列知道日期,如果你只是绘制一个时间序列,x 轴将显示日期。

我的代码是

from pandas_datareader import data as web
import matplotlib.pyplot as plt
import pandas as pd

#Download data
start = '2010-1-1'
end = '2016-10-1'
AAPL = web.DataReader('AAPL', 'yahoo', start=start, end=end)['Adj Close']
TSLA = web.DataReader('GOOG', 'yahoo', start=start, end=end)['Adj Close']

#Scatterplot
plt.scatter(AAPL, TSLA, alpha=.4, c=range(len(AAPL)))
plt.colorbar()
plt.xlabel("AAPL")
plt.ylabel("TSLA")
plt.grid()
plt.show()

此代码生成此图: Scatterplot with colours and legend

谢谢

【问题讨论】:

  • 欢迎来到 StackOverflow!小挑剔:我认为您正在寻找的词是彩条,而不是传说。图例通常用于表示一个框叠加层,用于标记和解释在同一图上绘制在一起的不同数据集。

标签: python pandas matplotlib legend series


【解决方案1】:

虽然那里可能有一个更简单的答案(任何人?),对我来说最直接的方法是手动更改颜色条刻度。

在调用 plt.show() 之前尝试以下操作:

clb = plt.gci().colorbar # get the colorbar artist
# get the old tick labels (index numbers of the dataframes)
clb_ticks = [int(t.get_text()) for t in clb.ax.yaxis.get_ticklabels()]
# convert the old, index, ticks into year-month-day format
new_ticks = AAPL.index[clb_ticks].strftime("%Y-%m-%d")
clb.ax.yaxis.set_ticklabels(new_ticks)

请注意,strftime 似乎没有在早于0.18pandas 版本中实现。在这种情况下,您必须按照here 的说明将.strftime("%Y-%m-%d") 替换为.apply(lambda x: x.strftime('%Y-%m-%d'))

【讨论】:

  • 如果您认为答案有用且内容丰富,请考虑关注 stackoverflow guidelines,将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
相关资源
最近更新 更多