簡體   English   中英

Pandas 數據框線圖:顯示隨機標記

[英]Pandas Dataframe Line Plot: Show Random Markers

我經常有包含許多觀察的數據框,並希望使用線圖快速瀏覽數據。

問題是顏色圖的顏色要么在 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()

它提供:

在此處輸入圖片說明

是否也可以為每條線繪制一個(隨機)標記?

提前致謝!

首先我們需要選擇隨機標記。 它可以通過包含所有可用標記的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)

例如:

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

然后對於標記,您可以繪制數據set_marker ,並通過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')

原來的:

在此處輸入圖片說明

修改的:

在此處輸入圖片說明

pandas使用matplotlib作為繪圖的默認后端。 要為每條線定義不同的標記和線型,您可以將list傳遞給style參數,其中列表中的每個值都遵循matplotlib.pyplot.plotfmt約定(例如'[marker][line][color]' ):

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

這也可以包括 1 個字母的顏色縮寫

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

您可以嘗試使用以下代碼使用隨機標記進行繪圖。 您還可以調整軸和圖例大小。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
from pandas import DataFrame

value1 = [10, 20, 30, 40, 50] 
value2 = [5, 10, 15, 20, 25]
value3 = [8, 9, 10, 15, 20]

results1 = DataFrame({'SAC': value1, 'TD3': value2, 'DDPG': value3})
color_dict = {'SAC': '#FF0000', 'TD3': '#0000FF', 'DDPG': '#008000'}
# 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')])
markers = np.random.choice(valid_markers, results1.shape[1], replace=False)
res1 = results1.plot(fontsize=10, linewidth=3, figsize=(10, 8), markersize=16, color=[color_dict.get(x, '#333333') for x in results1.columns])
for i, line in enumerate(res1.get_lines()):
  line.set_marker(markers[i])
plt.legend(fontsize=20, loc='lower right')
plt.xlabel("Episode", fontsize=20)
plt.ylabel("Rewards", fontsize=20)
plt.show()

輸出:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM