python 不透明度的 matplotlib 图例
python matplotlib legend for opacity
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 6, 4]
c = [(1, 0, 0, 1),(1, 0, 0, .8),(0, 0, 0, .5),(0, 0, 0, .8),(1, 0, 0, .3)]
plt.scatter(x,y,c=c,s=55)
plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
mpatches.Patch(color='black',label='Type2')])
plt.show()
我正在绘制一个与上述数据集有些相似的数据集。在我的数据集中,颜色代表数据点的分类,不透明度代表其误差的大小(数据集相当密集,使得错误条不可行。)
我想知道是否可以创建某种不透明度图例,也许是一行不透明度从 0 到 1 不等的黑点,每个黑点都标有相关错误。
谢谢!
如果可以选择使用亮度而不是不透明度来表示错误,您可以使用预定义的颜色图来显示颜色条,如下所示。否则,我认为您可以尝试定义自己的颜色图。
from matplotlib import pyplot as plt
from matplotlib import patches as mpatches
t1_x = [1, 2, 5]
t1_y = [2, 3, 4]
t1_err = [1, .8, .3]
t2_x = [3, 4]
t2_y = [5, 6]
t2_err = [.5, .8]
plt.figure(figsize=[8, 4])
t1_sc = plt.scatter(t1_x, t1_y, s=55, vmin=0, vmax=1,
c=t1_err, cmap=plt.cm.get_cmap('Reds'))
t2_sc = plt.scatter(t2_x, t2_y, s=55, vmin=0, vmax=1,
c=t2_err, cmap=plt.cm.get_cmap('Greys'))
plt.colorbar(t1_sc)
plt.colorbar(t2_sc)
plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
mpatches.Patch(color='black',label='Type2')])
plt.show()
您可以添加另一个以空散点图作为句柄的图例,其中散点的 alpha 值是变化的。
例如要使用从 0 到 1 的 6 种不同的不透明度,您可以这样做:
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 6, 4]
c = [(1, 0, 0, 1),(1, 0, 0, .8),(0, 0, 0, .5),(0, 0, 0, .8),(1, 0, 0, .3)]
plt.scatter(x,y,c=c,s=55)
leg1 = plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
mpatches.Patch(color='black',label='Type2')], loc="upper left")
plt.gca().add_artist(leg1)
error = [0,.2,.4,.6,.8,1]
h = [plt.scatter([],[],s=55, c=(0,0,0,i)) for i in error]
plt.legend(h, error, loc="upper right")
plt.show()
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 6, 4]
c = [(1, 0, 0, 1),(1, 0, 0, .8),(0, 0, 0, .5),(0, 0, 0, .8),(1, 0, 0, .3)]
plt.scatter(x,y,c=c,s=55)
plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
mpatches.Patch(color='black',label='Type2')])
plt.show()
我正在绘制一个与上述数据集有些相似的数据集。在我的数据集中,颜色代表数据点的分类,不透明度代表其误差的大小(数据集相当密集,使得错误条不可行。)
我想知道是否可以创建某种不透明度图例,也许是一行不透明度从 0 到 1 不等的黑点,每个黑点都标有相关错误。
谢谢!
如果可以选择使用亮度而不是不透明度来表示错误,您可以使用预定义的颜色图来显示颜色条,如下所示。否则,我认为您可以尝试定义自己的颜色图。
from matplotlib import pyplot as plt
from matplotlib import patches as mpatches
t1_x = [1, 2, 5]
t1_y = [2, 3, 4]
t1_err = [1, .8, .3]
t2_x = [3, 4]
t2_y = [5, 6]
t2_err = [.5, .8]
plt.figure(figsize=[8, 4])
t1_sc = plt.scatter(t1_x, t1_y, s=55, vmin=0, vmax=1,
c=t1_err, cmap=plt.cm.get_cmap('Reds'))
t2_sc = plt.scatter(t2_x, t2_y, s=55, vmin=0, vmax=1,
c=t2_err, cmap=plt.cm.get_cmap('Greys'))
plt.colorbar(t1_sc)
plt.colorbar(t2_sc)
plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
mpatches.Patch(color='black',label='Type2')])
plt.show()
您可以添加另一个以空散点图作为句柄的图例,其中散点的 alpha 值是变化的。
例如要使用从 0 到 1 的 6 种不同的不透明度,您可以这样做:
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 6, 4]
c = [(1, 0, 0, 1),(1, 0, 0, .8),(0, 0, 0, .5),(0, 0, 0, .8),(1, 0, 0, .3)]
plt.scatter(x,y,c=c,s=55)
leg1 = plt.legend(handles=[mpatches.Patch(color='red',label='Type1'),
mpatches.Patch(color='black',label='Type2')], loc="upper left")
plt.gca().add_artist(leg1)
error = [0,.2,.4,.6,.8,1]
h = [plt.scatter([],[],s=55, c=(0,0,0,i)) for i in error]
plt.legend(h, error, loc="upper right")
plt.show()