簡體   English   中英

漸變圖例 Matplotlib

[英]Gradient Legend Matplotlib

我是 python 的新手。 我的代碼將 csv 作為 dataframe 讀取,然后循環遍歷列並將每個列繪制為條形圖。 我想做的是向 plot 添加一個漸變圖例,范圍從藍色 alpha =0.01 到藍色 alpha =1。

代碼:

import pandas as pd
import matplotlib.pyplot as plt 
import numpy as np
import datetime

data = pd.read_csv("SomePath\Data.csv")
data.iloc[:, 0] = pd.to_datetime(data.iloc[:, 0])

year=pd.DatetimeIndex(data.iloc[:, 0]).year
df =pd.DataFrame(data)

X = year

for i in range(2,len(df.columns)):
    Y = list(df.iloc[:, i])
    plt.bar(X, Y, color='blue',alpha=0.01)

plt.title("Title")
plt.xlabel("Year")
plt.ylabel("Value")
plt.xticks(rotation = 90)
plt.xticks(np.arange(min(X),max(X)+1,1))
plt.show()

這是 plot:

在此處輸入圖像描述

您可以使用LinearSegmentedColormap創建自定義圖例:

import numpy as np
import pandas as pd
import matplotlib.colors
import matplotlib.pyplot as plt
import matplotlib.cm as cm


x = range(20)
y = np.array(range(240,260))

kwargs = {
    'color': 'blue', # set same blue as the one in Blues cmap
    'alpha': 0.3
}

plt.bar(x, y, **kwargs)
plt.bar(x, y*0.5, **kwargs)
plt.bar(x, y*2, **kwargs)

# From the docs: Create colormap from linear mapping segments
# segmentdata argument is a dictionary with a red, green and 
# blue entries. Each entry should be a list of x, y0, y1 tuples,
# forming rows in a table. Entries for alpha are optional.
cdict = {
    'red': [
        (0.0, 0.0, 0.0),
        (1.0, 0.0, 0.0) # red always 0
    ],
    'green': [
        (0.0, 0.0, 0.0),
        (1.0, 0.0, 0.0), # green always 0
    ],
    'blue': [
        (0.0, 1.0, 1.0),
        (1.0, 1.0, 1.0) # blue always 1
     ], 
    'alpha': [
        (0.0, 0.01, 0.01),
        (1.0, 1.0,  1.0) # alpha increases from 0.01 to 1
     ], 
} 

# colourbar from custom cdict
cmap = matplotlib.colors.LinearSegmentedColormap('blue', cdict, N=256)
plt.colorbar(cm.ScalarMappable(Normalize(0,1), cmap))

鏈接到生成的圖像

暫無
暫無

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

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