Pandas Dataframe Line Plot:显示随机标记

时间:2016-08-31 09:43:30

标签: python pandas matplotlib

我经常有数据框架有很多obervations,并希望使用线图快速浏览一下数据。

问题在于色图的颜色要么在X个观察中重复,要么难以区分,例如在连续彩色图的情况下。

所以我的想法是在线图上添加随机标记,这就是我卡住的地方。

这是一个带有一个markertyle的例子:

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# dataframe with random data
df = pd.DataFrame(np.random.rand(10, 8))

# plot
df.plot(kind='line', marker='d')
plt.show()

提供:

enter image description here

是否也可以为每一行绘制(随机)标记?

提前致谢!

2 个答案:

答案 0 :(得分:2)

首先我们需要选择随机标记。它可以通过包含所有可用标记的matplotlib.markers.MarkerStyle.markers字典来完成。标记也意味着“没有”,从'tick'开始,'caret'应该被丢弃。还有information个标记。让我们使用有效标记制作列表,然后随机选择我们绘制DataFrame所需的数量,或者您可以使用filled_markers的第二个选项:

import matplotlib as mpl
import numpy as np

# create valid markers from mpl.markers
valid_markers = ([item[0] for item in mpl.markers.MarkerStyle.markers.items() if 
item[1] is not 'nothing' and not item[1].startswith('tick') 
and not item[1].startswith('caret')])

# use fillable markers
# valid_markers = mpl.markers.MarkerStyle.filled_markers

markers = np.random.choice(valid_markers, df.shape[1], replace=False)

例如:

In [146]: list(markers )
Out[146]: ['H', '^', 'v', 's', '3', '.', '1', '_']

然后,对于标记,您可以绘制数据框,并通过set_marker方法为每一行设置标记。然后你可以在你的情节中添加图例:

import pandas as pd

np.random.seed(2016)
df = pd.DataFrame(np.random.rand(10, 8))

ax = df.plot(kind='line')
for i, line in enumerate(ax.get_lines()):
    line.set_marker(markers[i])

# for adding legend
ax.legend(ax.get_lines(), df.columns, loc='best')

原件:

enter image description here

修改:

enter image description here

答案 1 :(得分:0)

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

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