簡體   English   中英

使用數據相關標記和顏色繪制 3d 散點圖

[英]Drawing a 3d scatter plot with data dependent markers and colors

我有一個包含 5 列 f1,f2,f3,f4,y 的數據框df ,其中所有列中的所有值都來自有限的整數集,實際上,所有列都是分類列,轉換為整數。 我想要做的是繪制一個3d散點圖,以f1,f2,f3為軸,標記樣式由f4決定,最后顏色由y列決定。

以下代碼處理軸和顏色。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig =plt.figure(figsize=(20,16)).gca(projection='3d')
fig.scatter(df['f1'], df['f2'], df['f3'], c=df['y'], s=100)
plt.show()

但是,我不確定如何根據 f4 列獲取標記樣式。 受到這篇文章的遠程啟發,我可能會定義一個可能的標記列表:

marker_styles = ['.','o','v','^','>','<','s','p','*','h','H','D','d','1']

然后我會根據 f4 對我的數據進行分組。 對於每個組,我將使用下一個標記,如果組多於標記,則旋轉回 marker_styles 列表的開頭。

我不確定如何執行這個想法,或者是否有更好的選擇。

您可以遍歷 f4 的所有可能值,為該值創建過濾器並將其與標記組合:

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import pandas as pd
import itertools

N = 100
print(np.random.randint(1, 10, N))
df = pd.DataFrame({'f1': np.random.randint(1, 11, N),
                   'f2': np.random.randint(1, 11, N),
                   'f3': np.random.randint(1, 11, N),
                   'f4': np.random.randint(1, 11, N),
                   'y': np.random.randint(1, 11, N)})
marker_styles = ['.', 'o', 'v', '^', '>', '<', 's', 'p', '*', 'h', 'H', 'D', 'd', '1']

fig = plt.figure(figsize=(20, 16)).gca(projection='3d')
f4min = df['f4'].min()
f4max = df['f4'].max()
for f, m in zip(range(f4min, f4max + 1), itertools.cycle(marker_styles)):
    filter = df['f4'] == f
    fig.scatter(df['f1'][filter], df['f2'][filter], df['f3'][filter], c=df['y'][filter], s=100, marker=m, cmap='plasma')
plt.show()

例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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