[英]Plotting some third variable against x and y in matplotlib scatter?
一般來說,我對散點圖和python很陌生。 我正在嘗試針對x和ay繪制第三個變量,但是,我不確定如何指定該參數? 因此,我將擁有X值(整數),y值(也整數),然后在圖形本身上希望模型分數顯示。 有什么辦法可以做這種事情嗎?
謝謝。
您可以使用顏色繪制第三個值。 這是一個非常小的示例:
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()
在表面上看,這個問題並沒有真正意義,因為傳統的散點圖只有兩軸,當然你不能用三個維度(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
參數,該參數更改了標記的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.