与pandas中的数据点的线图

lin*_*ias 20 python matplotlib pandas

使用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();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我无法弄清楚如何将数据绘制为线上的点,如下例所示:

在此输入图像描述

这个matplotlib示例似乎暗示了方向,但我找不到如何使用pandas绘图功能来做到这一点.我特别感兴趣的是学习如何使用pandas,因为我一直在使用数据帧.

有线索吗?

tmd*_*son 41

你可以使用stylekwarg df.plot命令.来自文档:

风格:列表或字典

matplotlib每列的线条样式

因此,您可以为所有行设置一个linestyle,或为每一行设置不同的linestyle.

例如,这与您要求的类似:

df.plot(style='.-')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

df.plot(style=['+-','o-','.--','s:'])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

你也可以将markeverykwarg 传递给matplotlibplot命令,只能以给定的间隔绘制标记

df.plot(style='.-', markevery=5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Vin*_*iar 6

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

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述