我想通过根据变量定义标记的椭圆度来为散点图添加第四维。这有可能吗?
编辑:
我想避免3D情节。在我看来,这些情节通常不是很有用。
答案 0 :(得分:1)
您可以使用colorbar
作为3D绘图的第4维。一个例子如下所示:
import matplotlib.cm as cmx
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
def scatter3d(x,y,z, cs, colorsMap='jet'):
cm = plt.get_cmap(colorsMap)
cNorm = matplotlib.colors.Normalize(vmin=min(cs), vmax=max(cs))
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z, c=scalarMap.to_rgba(cs))
scalarMap.set_array(cs)
fig.colorbar(scalarMap,label='Test')
plt.show()
x = np.random.uniform(0,1,50)
y = np.random.uniform(0,1,50)
z = np.random.uniform(0,1,50)
所以scatter3D(x,y,z,x+y)
产生:
x+y
是第四维的颜色。您可以根据特定变量而不是x+y
添加计算出的椭圆度,以获得所需内容。
答案 1 :(得分:1)
要更改标记的椭圆度,您必须手动创建它们,因为尚未实现此功能。但是,我相信您可以使用颜色和大小作为附加尺寸,使用2D散点图显示4个尺寸。您必须自己处理从数据到标记大小的缩放。我在下面的例子中添加了一个简单的函数来处理它:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(60,4)
def scale_size(data, data_min=None, data_max=None, size_min=10, size_max=60):
# if the data limits are set to None we will just infer them from the data
if data_min is None:
data_min = data.min()
if data_max is None:
data_max = data.max()
size_range = size_max - size_min
data_range = data_max - data_min
return ((data - data_min) * size_range / data_range) + size_min
plt.scatter(data[:,0], data[:,1], c=data[:,2], s=scale_size(data[:,3]))
plt.colorbar()
plt.show()
结果:
答案 2 :(得分:1)
您可以将DbProviderFactories.GetFactory(WebConfigurationManager
.ConnectionStrings[name].ProviderName);
个补丁直接放在轴上,如this matplotlib example所示。使其适应使用偏心率作为你的第三维度#);)保持标记区域不变:
Ellipse
当然,在这种情况下,您需要将标记区域缩放到x,y值。