示例代碼:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
data = np.random.randint(0, 255, size=[40, 40, 40])
x, y, z = data[0], data[1], data[2]
ax = plt.subplot(111, projection='3d') # 建立一個三維的繪圖工程# 将資料點分成三部分畫,在顔色上有區分度ax.scatter(x[:10], y[:10], z[:10], c='y') # 繪制資料點ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
ax.scatter(x[30:40], y[30:40], z[30:40], c='g')
ax.set_zlabel('Z') # 坐标軸ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()
今天想在散點圖的某些特定的點外面畫圓圈标記,從下面的文章找到一些靈感,隻要在原來的散點圖上面給指點添加相應的标志,設定其透明度就可以實作該想法。
順便複習下散點圖的用法。
大家平時為了直覺地顯示資料的分布情況,在畫散點圖的時候,簡單地把資料點用圓點标出來,像這樣:
這樣:
還有這樣:
然而今天我想給大家展示的散點圖,或許沒有那麼直覺地反映資料的分布情況,不夠實用,但是真的很美很藝術,每個的點的顔色和大小都不一樣,形狀也是多變的。比如五角星的散點圖:
圓點的散點圖:
Y形的散點圖:
等等還有很多,那麼這些漂亮的形狀是怎麼畫出來的呢?其實代碼很簡單:
from numpy import *;
N = 50 # 點的個數
x = np.random.rand(N) * 2 # 随機産生50個0~2之間的x坐标
y = np.random.rand(N) * 2 # 随機産生50個0~2之間的y坐标
colors = np.random.rand(N) # 随機産生50個0~1之間的顔色值
area = np.pi * (15 * np.random.rand(N))**2 # 點的半徑範圍:0~15
# 畫散點圖
plt.scatter(x, y, s=area, c=colors, alpha=0.5, marker=(9, 3, 30))
plt.show()
這裡用到一個matplotlib.pyplot子庫中畫散點圖的函數
matplotlib.pyplot.scatter(x, y, s=20, c=None, marker='o',
cmap=None, norm=None, vmin=None, vmax=None, alpha=None,
linewidths=None, verts=None, edgecolors=None, hold=None,
data=None, **kwargs)
這個函數接收的參數很多,有預設值的平時也不需要我們指定,是可選的,這次我們用到的除了基本的x ,y參數,還有c,s,alpha和marker,c就是為點指定的顔色數組,s是點的面積大小,alpha是點的顔色的透明度,marker是指定點标記的形狀。在例子裡指定透明度為0.5,c和s是随機生成的,我們要改變的是marker的值,marker有很多值可供選擇,下表展示了在例子代碼的基礎上,改變marker的值後的效果:
markerresult
”.”
”,”
“o”
“v”
“^”
“<”
“>”
“1”
“2”
“3”
“4”
“8”
“s”
“p”
“*”
“h”
“H”
“+”
“x”
“D”
“d”
“
”
“_”
“None”
沒錯就是什麼都沒有。。。
“$…$”
(numsides, style, angle)
eg:(9,0, 30)
注:numsides是邊的個數,
angle是旋轉角度,
style隻有0,1,2,3四個值
(numsides, style, angle)
eg:(9,1, 30)
(numsides, style, angle)
eg:(9,2, 30)
(numsides, style, angle)
eg:(9,3, 30)
注:此時numsides和angle的值自動被忽略
……
這麼多種點的形狀符号夠我們用了吧~以後想用哪種查一下就好啦~