我一般对散点图和python很陌生。我正在尝试针对x和y绘制第三个变量,但是,我不确定如何指定该参数?因此,我将拥有X值(整数),y值(也整数),然后在图形本身上希望模型分数显示出来。有什么办法做这种事情吗?
谢谢。
答案 0 :(得分:1)
您可以使用颜色绘制第三个值。这是一个非常小的示例:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
plt.scatter(x,y, c=z, s=5, cmap=cm.hsv)
cbar= plt.colorbar()
plt.show()
修改
您还可以使用标记的大小,其透明度,色相或rgb值来描绘更多信息。这是一个在感知上一致的颜色图上标记大小,alpha级别和颜色的示例。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors as colors
import matplotlib.cm as cmx
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
t = np.random.rand(100)
w = np.random.rand(100)
fig, ax = plt.subplots(1, 1)
cmap = plt.get_cmap('plasma')
cNorm = colors.Normalize(vmin=0, vmax=max(z))
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cmap)
for i in range(100):
ax.scatter(x[i],y[i], c=scalarMap.to_rgba(z[i]), s=t[i]*100, cmap=cmx.plasma, alpha=w[i], edgecolor='none')
scalarMap.set_array([])
fig.colorbar(scalarMap,ax=ax)
for a in [0.1, 0.5, 0.9]:
ax.scatter([], [], c='k', alpha=0.5, s=a*100, label=str(a), edgecolors='none')
l1 = ax.legend(scatterpoints=1, frameon=True, loc='lower left' ,markerscale=1)
for b in [0.25, 0.5, 0.75]:
ax.scatter([], [], c='k', alpha=b, s=50, label=str(b), edgecolors='none')
ax.legend(scatterpoints=1, frameon=True, loc='lower right' ,markerscale=1)
fig.show()
答案 1 :(得分:1)
从表面上看,这个问题真的没有道理,因为传统的散点图只有两个轴,当然您不能绘制三个维度(x,y和精度)的点
但是,还有其他方法可以实现。
import numpy as np
from matplotlib import pyplot as plt
x = np.random.rand(200)
y = np.random.rand(200)
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, c=(x + y), cmap='RdPu')
scatter
带有一个c
参数(可以是一个数字值)和一个cmap
参数,可以是一个引用colormap
的字符串。
colormap
对象将c
中提供的数字转换为沿颜色映射的点,您可以将其视为渐变条。
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(5, 5))
ax = Axes3D(fig)
ax.scatter(x, y, (x + y))
这会将您的第3维(精度)转换为普通的空间维。
与第一部分中的颜色选项非常相似,您可以更改分散标记的大小(只要您对值的比例有所了解)。因此,根据第一个示例,您也可以这样做;
import numpy as np
from matplotlib import pyplot as plt
x = np.random.rand(200)
y = np.random.rand(200)
fig, ax = plt.subplots(figsize=(5, 5))
ax.scatter(x, y, c='k', s=5*(x + y), cmap='RdPu')
scatter
也使用s
参数,该参数会更改标记的大小。