簡體   English   中英

在matplotlib散點圖中針對x和y繪制一些第三變量?

[英]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和精度)繪制點。

但是,還有其他方法可以這樣做。

  1. 使用顏色
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提供的數字轉換為沿顏色映射的點,您可以將其視為漸變條。

  1. 使用3D軸
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(5, 5))
ax = Axes3D(fig)

ax.scatter(x, y, (x + y))

這會將您的第3維(精度)轉換為普通的空間維。

  1. 使用標記的大小

與第一部分中的顏色選項非常相似,您可以更改分散標記的大小(前提是您對值的比例有所了解)。 因此,根據第一個示例,您也可以這樣做;

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.

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