带有熊猫数据点的线图

Posted

技术标签:

【中文标题】带有熊猫数据点的线图【英文标题】:Line plot with data points in pandas 【发布时间】:2017-10-11 23:32:37 【问题描述】:

使用pandas我可以轻松制作线图:

import pandas as pd
import numpy as np
%matplotlib inline # to use it in jupyter notebooks

df = pd.DataFrame(np.random.randn(50, 4), 
        index=pd.date_range('1/1/2000', periods=50), columns=list('ABCD'))
df = df.cumsum()
df.plot();

但我不知道如何将数据绘制为线上的点,如下例所示:

This matplotlib example 似乎暗示了方向,但我找不到如何使用熊猫绘图功能来做到这一点。我对学习如何使用 pandas 特别感兴趣,因为我一直在使用数据框。

有什么线索吗?

【问题讨论】:

请检查我的答案中的编辑,如果您正在努力将正确的点设置为某些日期,这可能真的很有帮助。 很好,@ViníciusAguiar,非常好的提示。 【参考方案1】:

您可以将style kwarg 用于df.plot 命令。来自docs:

样式:列表或字典

matplotlib 每列线型

因此,您可以为所有线条设置一种线条样式,也可以为每条线条设置不同的线条样式。

例如这与您要求的类似:

df.plot(style='.-')

要为每行定义不同的标记和线型,可以使用列表:

df.plot(style=['+-','o-','.--','s:'])

您也可以将markevery kwarg 传递给matplotlib 的 plot 命令,以仅在给定的间隔内绘制标记

df.plot(style='.-', markevery=5)

【讨论】:

太棒了,非常整洁!非常感谢。 是否也可以让这些点变得活泼,所以如果你将鼠标悬停在它们上面,它就像磁铁一样,你可以看到确切的值?【参考方案2】:

您可以在df.plot() 中使用markevery 参数,如下所示:

df = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2000', periods=1000), columns=list('ABCD'))
df = df.cumsum()

df.plot(linestyle='-', markevery=100, marker='o', markerfacecolor='black')

plt.show()

markevery 将接受特定点(或日期)的列表,如果这是您想要的。

您还可以定义一个函数来帮助找到正确的位置:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2000', periods=1000), columns=list('ABCD'))
df = df.cumsum()

dates = ["2001-01-01","2002-01-01","2001-06-01","2001-11-11","2001-09-01"]
def find_loc(df, dates):
    marks = []
    for date in dates:
        marks.append(df.index.get_loc(date))
    return marks


df.plot(linestyle='-', markevery=find_loc(df, dates), marker='o', markerfacecolor='black')

plt.show()

【讨论】:

谢谢!我选择另一个只是因为它一步一步地解释。非常感谢。 @lincolnfrias 没问题!我只是想确保你会注意到我的编辑! =)

以上是关于带有熊猫数据点的线图的主要内容,如果未能解决你的问题,请参考以下文章

向熊猫数据框箱线图添加标签?

散景折线图未绘制完整的熊猫数据框

如何绘制混合箱线图:另一半有抖动点的半箱线图?

熊猫中的时间序列箱线图

熊猫箱线图中每个子图的独立轴

使用熊猫的箱线图