rul*_*l30 6 python matplotlib jupyter-lab
我正在用一个非常小的标记散点图数据点(见下面的屏幕截图)。当我使用非常小的标记 ',' 时,图例很难阅读(示例代码取自此处)。
(Python 3,Jupyter 实验室)
如何增加图例中标记的大小。上述网站上显示的两个版本不起作用:
legend = ax.legend(frameon=True)
for legend_handle in legend.legendHandles:
legend_handle._legmarker.set_markersize(9)
Run Code Online (Sandbox Code Playgroud)
和
ax.legend(markerscale=6)
Run Code Online (Sandbox Code Playgroud)
然而,当标记设置为“.”时,这两种解决方案确实有效。
如何在图例中显示更大的制造商?
来自intoli.com 的示例代码:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(12)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
for i in range(5):
mean = [np.random.random()*10, np.random.random()*10]
covariance = [ [1 + np.random.random(), np.random.random() - 1], [0, 1 + np.random.random()], ]
covariance[1][0] = covariance[0][1] # must be symmetric
x, y = np.random.multivariate_normal(mean, covariance, 3000).T
plt.plot(x, y, ',', label=f'Cluster {i + 1}')
ax.legend(markerscale=12)
fig.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
plot通过将标记大小设置为 1 像素,您可以获得 1 像素大小的标记。这看起来像
plt.plot(x, y, marker='s', markersize=72./fig.dpi, mec="None", ls="None")
Run Code Online (Sandbox Code Playgroud)
上面所做的是将标记设置为正方形,将标记大小设置为 ppi(每英寸点数)除以 dpi(每英寸点数)== 点数 == 像素,并删除线条和边缘。
那么您markerscale在图例中尝试使用的解决方案效果很好。
完整示例:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(12)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
for i in range(5):
mean = [np.random.random()*10, np.random.random()*10]
covariance = [ [1 + np.random.random(), np.random.random() - 1], [0, 1 + np.random.random()], ]
covariance[1][0] = covariance[0][1] # must be symmetric
x, y = np.random.multivariate_normal(mean, covariance, 3000).T
plt.plot(x, y, marker='s', markersize=72./fig.dpi, mec="None", ls="None",
label=f'Cluster {i + 1}')
ax.legend(markerscale=12)
fig.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
根据此讨论,markersize当使用像素 ( ,) 作为标记时, 没有任何效果。生成自定义图例怎么样?例如,通过改编本教程中的第一个示例,可以获得一个相当不错的图例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
np.random.seed(12)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
for i in range(5):
mean = [np.random.random()*10, np.random.random()*10]
covariance = [ [1 + np.random.random(), np.random.random() - 1], [0, 1 + np.random.random()], ]
covariance[1][0] = covariance[0][1] # must be symmetric
x, y = np.random.multivariate_normal(mean, covariance, 3000).T
plt.plot(x, y, ',', label=f'Cluster {i + 1}')
##generating custom legend
handles, labels = ax.get_legend_handles_labels()
patches = []
for handle, label in zip(handles, labels):
patches.append(mpatches.Patch(color=handle.get_color(), label=label))
legend = ax.legend(handles=patches)
fig.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
输出如下所示: