如何为点创建带有颜色渐变的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) 有一组段的{(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,2}x{1,2}x{2}x{1,2}
在第一个没有任何重叠之后,程序返回组合,这是问题的解决方案.当然它有效,当然它很慢.
绘制一条[0,1]
标有点的线,该点是至少一个线段的边界.构建I
由两个连续点组成的间隔列表.对于每个元素I
采取S
涵盖它的段列表.对于构建的每个子集S'
,S
该集合A'
等于允许的行号的并集.例如S' = {(0.5,0.6;1,2), (0.4,0.7;2)}
,A' = …