Pandas 数据框线图:显示随机标记

Cor*_*yer 5 python matplotlib pandas

我经常有包含许多观察的数据框,并希望使用线图快速浏览数据。

问题是颜色图的颜色要么在 X 次观察中重复,要么难以区分,例如在顺序颜色图的情况下。

所以我的想法是在我卡住的线图中添加随机标记。

这是一个带有一种标记样式的示例:

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

它提供:

在此处输入图片说明

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

提前致谢!

小智 7

pandas用作matplotlib绘图的默认后端。要为每条线定义不同的标记和线型,您可以将 a 传递liststyle参数,其中列表中的每个值都遵循以下fmt约定matplotlib.pyplot.plot(例如'[marker][line][color]'):

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

这还可以包括 1 个字母的颜色缩写

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


Ant*_*pov 5

首先我们需要选择随机标记。它可以通过matplotlib.markers.MarkerStyle.markers包含所有可用标记的字典来完成。标记也意味着“没有”,以“tick”开头,“caret”应该去掉。关于标记的更多信息。让我们使用有效标记列出列表,然后从中随机选择绘制 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)
Run Code Online (Sandbox Code Playgroud)

例如:

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

然后对于标记,您可以绘制数据框,并通过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')
Run Code Online (Sandbox Code Playgroud)

原来的:

在此处输入图片说明

修改的:

在此处输入图片说明