我经常有数据框架有很多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()
提供:
是否也可以为每一行绘制(随机)标记?
提前致谢!
答案 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')
原件:
修改:
答案 1 :(得分:0)
要为每行定义不同的标记和线型,可以使用列表:
df.plot(style=['+-','o-','.--','s:'])