Jak*_*aas 5 python python-3.x plotly jupyter-notebook
我试图在Plotly for Python中绘制几个不同颜色的表面.
具体地,表面示出了用于在相空间中的不同点处采取动作的预测奖励函数.由于我在每个点都有几个可能的动作,每个动作都是不同的表面.我想要唯一地为每个表面着色,但不依赖于x,y或z坐标.
我试着在R中回答,但我无法弄清楚我做错了什么.我总是得到相同的蓝色.因为我在我的代码的其他部分使用PyPlot,所以我从默认的matplotlib表格中选择颜色.
这是玩具数据的基本示例.
import matplotlib.pyplot as plt
import numpy as np
import plotly.graph_objs as go
import plotly.offline as off
off.init_notebook_mode()
make_int = np.vectorize(int)
cmap = plt.get_cmap("tab10")
saddle = np.array([[x**2-y**2 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
paraboloid = np.array([[x**2 + y**2-100 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
mycolors_a = make_int(256*np.array(cmap(1)[0:3])).reshape((1, 1,-1)).repeat(21, axis = 0).repeat(21, axis =1)
mycolors_b = make_int(256*np.array(cmap(2)[0:3])).reshape((1, 1,-1)).repeat(21, axis = 0).repeat(21, axis =1)
trace_a = go.Surface(z = saddle, surfacecolor = mycolors_a, opacity = .7, showscale = False, name = "Trace A")
trace_b = go.Surface(z = paraboloid, surfacecolor = mycolors_b, opacity = .7, showscale = False, name = "Trace B")
data = [trace_a, trace_b]
off.iplot(data)
Run Code Online (Sandbox Code Playgroud)
产生以下内容:
我应该看到一个蓝色的马鞍和一个橙色的抛物面,但我没有.请注意,即使我将参数更改为cmap,我也总是得到相同的蓝色.谢谢你的帮助!
这里的文档有点神秘。
表面颜色
(列表、numpy 数组或 Pandas 系列的数字、字符串或日期时间。)
设置表面颜色值,用于设置独立于 的色标
z。
我从来没有设法把一个字符串列表,即像'rgb(0.3, 0.5, 0)'这样的颜色值或RGB元组放在里面。
但是您可以使用所需的颜色定义自己的色标。
colorscale = [[0, 'rgb' + str(cmap(1)[0:3])],
[1, 'rgb' + str(cmap(2)[0:3])]]
Run Code Online (Sandbox Code Playgroud)
然后提供一个与您绘制的值具有相同维度的数值数组。
colors_saddle = np.zeros(shape=saddle.shape)
Run Code Online (Sandbox Code Playgroud)
所有值都设置为0,因此将映射到您的colorscale. 下一个颜色也是如此。
另外,你需要设置cmax和cmin手动。
完整代码
import numpy as np
import matplotlib.pyplot as plt
import plotly.graph_objs as go
import plotly.offline as off
off.init_notebook_mode()
make_int = np.vectorize(int)
cmap = plt.get_cmap("tab10")
saddle = np.array([[x**2-y**2 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
paraboloid = np.array([[x**2 + y**2-100 for x in np.arange(-10,11)] for y in np.arange(-10,11)])
colors_saddle = np.zeros(shape=saddle.shape)
colors_paraboloid = np.ones(shape=paraboloid.shape)
colorscale = [[0, 'rgb' + str(cmap(1)[0:3])],
[1, 'rgb' + str(cmap(2)[0:3])]]
trace_a = go.Surface(z=saddle,
surfacecolor=colors_saddle,
opacity=.7,
name="Trace A",
cmin=0,
cmax=1,
colorscale=colorscale)
trace_b = go.Surface(z=paraboloid,
surfacecolor=colors_paraboloid,
opacity=.7,
name="Trace B",
cmin=0,
cmax=1,
showscale=False,
colorscale=colorscale)
data = [trace_a, trace_b]
off.iplot(data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |