python - 两个 Pandas 系列的散点图,按日期着色并带有图例

标签 python pandas matplotlib legend series

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

我的问题与显示颜色的图例有关。 我希望图例显示颜色对应的日期/年份,而不仅仅是像现在这样的数据条目的索引。但我无法做到这一点,也无法在 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

谢谢

最佳答案

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

在调用 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.18 之前的 pandas 版本中实现。在这种情况下,您必须将 .strftime("%Y-%m-%d") 替换为 .apply(lambda x: x.strftime('%Y-%m -%d')) 如所解释的 here .

clb-ymd_labels-pandas

关于python - 两个 Pandas 系列的散点图,按日期着色并带有图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061493/

相关文章:

javascript - 如何让 Facebook 登录按钮显示 "Logout"

python - 使用 flask 获取输入文件名和文件扩展名

python - 尝试运行 pdfquery 示例时出错

python - 如何查明数据框中的行是否已存在于单独的数据框中?

python - 使用mongo时如何避免使用app.context_app

python - 如何根据不同的列名合并两个数据框

python - 无法在 DataFrame 中添加列名称

python-3.x - 如何使用 plt.text() 函数在 python3 生成的图中输入特殊符号?

python - Pandas 中数据为负时为红线,数据为正时为绿线

python - 如何使用 seaborn 在同一张图上绘制两个 fiddle 图系列?