问题描述
我是编程的新手,我正尝试使用Python(Jupyter Notebook)通过Plotly创建一个简单的绘图,该绘图在网格配置中具有很多点。在此示例中,我只是制作5 x 5的点网格。我可以用Matplotlib成功地做到这一点,但不能用Plotly做到。如何获得与Matplotlib相似的点网格?使用Plotly不会显示所有点。我想使用Plotly,因为它更具交互性,并且我正在分别尝试将一个简单的点网格图放置在Plotly仪表盘中的工作。这是我目前的代码。我将不胜感激。谢谢!
# Import libraries
import numpy as np
import plotly.graph_objs as go
import matplotlib.pyplot as plt
%matplotlib inline
# Set up sample data
posX = [0,1,2,3,4]
posY = [-2,-1,2]
posXX,posYY = np.meshgrid(posX,posY)
# Use Matplotlib
f,ax = plt.subplots()
ax.plot(posXX,posYY,'o',ms=5)
ax.set_xlabel('X Position')
ax.set_ylabel('Y Position')
ax.set_title('Point Grid');
# Now use Plotly
fig = go.figure()
fig.add_trace(go.Scatter(x = posXX,y = posYY,mode = 'markers'))
fig.update_layout(title = 'Point Grid',xaxis_title = 'X Position',yaxis_title = 'Y Position',hovermode = 'x')
解决方法
下面的示例代码可用于在Plotly中创建网格:
示例代码:
from plotly.offline import iplot
colours = ['blue','orange','green','red','purple']
layout = {'title': 'Point Grid'}
traces = []
for x,y,c in zip(posXX.T,posYY.T,colours):
traces.append({'x': x,'y': y,'mode': 'markers','marker': {'color': c,'size': 10},'name': c})
layout['xaxis'] = {'title': 'X Position'}
layout['yaxis'] = {'title': 'Y Position'}
iplot({'data': traces,'layout': layout})
输出:
评论:
我在这里故意使用了较低级别的Plotly代码,因为(个人)我认为它为graph_objects
的内容提供了更高的透明度,并提供了更简单的配置。
关于您遇到的问题,这是因为Plotly处理meshgrid
布局与matplotlib
有所不同。因此,我使用了一个非常简单的for循环和zip()
函数,以保留您现有的数据集。