小编and*_*.ge的帖子

Matplotlib 3D散点图与颜色渐变

如何为点创建带有颜色渐变的3D绘图?请参阅下面的示例,该示例适用于2D散点图.

编辑(感谢Chris):我期望从3D绘图中看到的是从2D红色到绿色的点的颜色渐变,如2D散点图中所示.我在3D散点图中看到的只是红点.

解决方案:由于某些原因(与我在别处复制的渐变示例相关),我将xrange设置为len-1,这会混淆3D绘图中的所有内容.

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

# Create Map
cm = plt.get_cmap("RdYlGn")

x = np.random.rand(30)
y = np.random.rand(30)
z = np.random.rand(30)
#col = [cm(float(i)/(29)) for i in xrange(29)] # BAD!!!
col = [cm(float(i)/(30)) for i in xrange(30)]

# 2D Plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, s=10, c=col, marker='o')  

# 3D Plot
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
ax3D.scatter(x, y, z, s=10, c=col, marker='o')  

plt.show()
Run Code Online (Sandbox Code Playgroud)

python 3d plot scatter matplotlib

16
推荐指数
2
解决办法
3万
查看次数

按行排列段而不重叠

有一组段的{(a_i,b_i) with i = 1, ..., n}0 <= a_i < b_i <= 1必须被布置在N行[0,1],而不重叠.

例如,如果一个集合可以由{(0.35,0.41), (0.40,0.43), (0.47,0.88)}和组成N >= 2,则可以排列没有重叠的段.随着N = 1这是不可能的,因为第一和第二部分重叠.

对于必须放置一个段的行没有任何约束,一种可能的算法如下:根据它们的起点对段进行排序a_i,然后将它们一个接一个地放在其中一个N行上.如果不能将段a_i放在任何一条线上而不与任何已经放置的段重叠,则意味着没有解决方案.

如果某些细分市场对他们必须放置的线路有限制怎么办?例如,段(a_2,b_2)可以仅放置在第3行,而将其写为(a_2,b_2;3).

一种可能的情况如下:{(0.45,0.56;-), (0.48,0.67;-), (0.66,0.70;2), (0.68,0.71;-)}N = 2.如果将第一个段放在第一行上,则第二个段必须在第二个行上,第三个段不能满足约束.相反,如果第一段放置在第二行上,则第二段在第一行上,第三段在第二行上实现约束而第二行在第一行上.

我试过的

  1. 尝试满足约束条件的每种组合.在最后一个示例中,{1,2}x{1,2}x{2}x{1,2}在第一个没有任何重叠之后,程序返回组合,这是问题的解决方案.当然它有效,当然它很慢.

  2. 绘制一条[0,1]标有点的线,该点是至少一个线段的边界.构建I由两个连续点组成的间隔列表.对于每个元素I采取S涵盖它的段列表.对于构建的每个子集S',S该集合A'等于允许的行号的并集.例如S' = {(0.5,0.6;1,2), (0.4,0.7;2)},A' = …

algorithm

6
推荐指数
1
解决办法
417
查看次数

标签 统计

3d ×1

algorithm ×1

matplotlib ×1

plot ×1

python ×1

scatter ×1