- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的数据框:
df = pd.DataFrame({"Date":["2020-01-27","2020-02-27","2020-03-27","2020-04-27", "2020-05-27", "2020-06-27", "2020-07-27",
"2020-01-27","2020-02-27","2020-03-27","2020-04-27", "2020-05-27", "2020-06-27", "2020-07-27"],
"A_item":[2, 8, 0, 1, 8, 10, 4, 7, 2, 15, 5, 12, 10, 7],
"B_item":[1, 7, 10, 6, 5, 9, 2, 5, 6, 1, 2, 6, 15, 8],
"C_item":[9, 2, 9, 3, 9, 18, 7, 2, 8, 1, 2, 8, 1, 3],
"Channel_type":["Chanel_1", "Chanel_1", "Chanel_1", "Chanel_1", "Chanel_1", "Chanel_1", "Chanel_1",
"Chanel_2", "Chanel_2", "Chanel_2", "Chanel_2", "Chanel_2", "Chanel_2", "Chanel_2"]
})
我想在 Channel_type 列上绘制一个带有下拉过滤器的组条形图。这就是我正在尝试的:
trace2 = go.Bar(x=df["Date"], y=df[["B_item"]])
trace3 = go.Bar(x=df["Date"], y=df[["C_item"]])
list_updatemenus = [{'label': 'All',
'method': 'update',
'args': [{'visible': [True, True]}, {'title': 'All'}]},
{'label': 'Chanel_1',
'method': 'update',
'args': [{'visible': [True, False]}, {'title': 'Chanel_1'}]},
{'label': 'Chanel_2',
'method': 'update',
'args': [{'visible': [False, True]}, {'title': 'Chanel_2'}]}]
data = [trace1,trace2,trace3]
layout=go.Layout(title='Distribution of Sales by Region',updatemenus=list([dict(buttons= list_updatemenus)]),width=1000,height=800,barmode='group')
fig = go.Figure(data,layout)
fig.show()
并没有得到想要的输出:Plot 1
因为它按 "A_item"、"B_item" 和 "C_item" 过滤图表,而我想按提到的 Channel_type 列。
所以理想的结果应该是下图,但是下拉菜单会根据 Channel_type 更改图表:
我能够在 Jupyter notebook 中使用 Ipywidgets 解决问题,但它并不真正适合我的特定任务。这是代码:
from plotly import graph_objs as go
import ipywidgets as w
from IPython.display import display
x = 'Date'
y1 = 'A_item'
y2 = 'B_item'
y3 = 'C_item'
trace1 = {
'x': df[x],
'y': df[y1],
'type': 'bar',
'name':'A_item'
}
trace2={
'x': df[x],
'y': df[y2],
'type': 'bar',
'name':'B_item'
}
trace3 = {
'x': df[x],
'y': df[y3],
'type': 'bar',
'name':'C_item',
}
data = [trace1, trace2, trace3]
# Create layout for the plot
layout=dict(
title='Channels',
width=1200, height=700, title_x=0.5,
paper_bgcolor='#fff',
plot_bgcolor="#fff",
xaxis=dict(
title='Date',
type='date',
tickformat='%Y-%m-%d',
gridcolor='rgb(255,255,255)',
zeroline= False,
),
yaxis=dict(
title='My Y-axis',
zeroline= False
)
)
fig = go.FigureWidget(data=data, layout=layout)
def update_fig(change):
aux_df = df[df.Channel_type.isin(change['new'])]
with fig.batch_update():
for trace, column in zip(fig.data, [y1, y2, y3]):
trace.x = aux_df[x]
trace.y = aux_df[column]
drop = w.Dropdown(options=[
('All', ['Chanel_1', 'Chanel_2']),
('Chanel_1', ['Chanel_1']),
('Chanel_2', ['Chanel_2']),
])
drop.observe(update_fig, names='value')
display(w.VBox([drop, fig]))
这是输出:
问题是我无法将 VBox 包装到 HTML 文件中并保存下拉菜单。此外,它不适用于 Python shell,因为它适用于 Jupyter notebook,我需要分享它。
因此,理想的结果是只将最后一个图形包裹在 Plotly fig 中,而没有 ipywidgets。
非常感谢任何帮助!
谢谢!
最佳答案
要注意的最重要的一点是,对于 go.Bar
,如果您在 x
参数中有 n
个日期,并且您传递了一个维度 (m, n) 到 go.Bar
的 y
参数的二维数组,Plotly 理解创建一个分组条形图,每个日期 n 都有 m
条。
对于您的 DataFrame,df[df['Channel_type'] == "Channel_1"][items].T.values
之类的东西将根据需要 reshape 它。所以我们可以将它应用到我们传递给我们制作的按钮的 args
的 y
字段。
感谢@veSTLand 对按钮进行调整以使其成为下拉菜单的代码部分。
import pandas as pd
import plotly.graph_objects as go
df = pd.DataFrame({"Date":["2020-01-27","2020-02-27","2020-03-27","2020-04-27", "2020-05-27", "2020-06-27", "2020-07-27",
"2020-01-27","2020-02-27","2020-03-27","2020-04-27", "2020-05-27", "2020-06-27", "2020-07-27"],
"A_item":[2, 8, 0, 1, 8, 10, 4, 7, 2, 15, 5, 12, 10, 7],
"B_item":[1, 7, 10, 6, 5, 9, 2, 5, 6, 1, 2, 6, 15, 8],
"C_item":[9, 2, 9, 3, 9, 18, 7, 2, 8, 1, 2, 8, 1, 3],
"Channel_type":["Channel_1", "Channel_1", "Channel_1", "Channel_1", "Channel_1", "Channel_1", "Channel_1",
"Channel_2", "Channel_2", "Channel_2", "Channel_2", "Channel_2", "Channel_2", "Channel_2"]
})
fig = go.Figure()
colors = ['#636efa','#ef553b','#00cc96']
items = ["A_item","B_item","C_item"]
for item, color in zip(items, colors):
fig.add_trace(go.Bar(
x=df["Date"], y=df[item], marker_color=color
))
# one button for each df column
# slice the DataFrame and apply transpose to reshape it correctly
updatemenu= []
buttons=[]
for channel in df['Channel_type'].unique():
buttons.append(dict(method='update',
label=channel,
args=[{
'y': df[df['Channel_type'] == channel][items].T.values
}])
)
## add a button for both channels
buttons.append(dict(
method='update',
label='Both Channels',
args=[{
'y': df[items].T.values
}])
)
# some adjustments to the updatemenu
# from code by vestland
updatemenu=[]
your_menu=dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons']=buttons
updatemenu[0]['direction']='down'
updatemenu[0]['showactive']=True
fig.update_layout(updatemenus=updatemenu)
fig.show()
关于python - Plotly 图表的下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65670966/
我想更改 plotly(_express) 图中的构面标签。剧情如下: import plotly.express as px tips = px.data.tips() fig = px.scatt
我正在尝试使用 plotly.js 在 map 上绘制数据。我知道您可以通过以下方式获得一个国家/地区的 map : layout = dict( title = '',
关于 this page暗示他们有一些默认的色标,例如“Viridis”。我终其一生都找不到一个网页来记录这些命名的色标是什么。 最佳答案 问题是我是英国人并且正确拼写了颜色。色标可在 https:/
在下面的示例中,我在一个 plotly 子图中有四个箱形图。此示例中的四个箱形图中的每一个都有 3 个变量:股票、债券和现金。在每个箱线图中,我希望股票以相同的颜色(例如蓝色)显示,债券以相同的颜色(
我有一个 plotly plot,当数据发生变化时,我想删除 plot 并生成一个新 plot。为此,我这样做: $('#heatmap2').empty() 然后我重新生成我的 plotly 。但是
有许多问题和答案以一种或另一种方式涉及这个主题。有了这个贡献,我想清楚地说明为什么一个简单的方法,比如 marker = {'color' : 'red'}将适用于 plotly.graph_obje
这可能是一个非常愚蠢的问题,但是当使用 .plot() 绘制 Pandas DataFrame 时,它非常快并且会生成具有适当索引的图形。一旦我尝试将其更改为条形图,它似乎就失去了所有格式并且索引
我用 plotly (express) 生成了很多图像,并将它们以 png 格式保存在本地目录中。我想创建一个带有 plotly dash 的仪表板。我生成的图像有很多依赖关系:这就是我不想将代码包含
最近,我正在学习Plotly express和Altair/Vega-Lite进行交互式绘图。他们两个都令人印象深刻,我想知道他们的优点和缺点是什么。尤其是对于创建交互式地块,它们之间有什么大差异,何
在 plotly 中,我可以创建一个直方图,例如in this example code from the documentation : import plotly.express as px df
来自 Matlab 我正在努力弄清楚为什么以下不起作用: plot(x=rand(10),y=rand(10)) 正确生成图表。 x=rand(10) y=rand(10) plot(x,y) 产生错
我和一位同事一直在尝试设置自定义图例标签,但到目前为止都失败了。下面的代码和详细信息 - 非常感谢任何想法! 笔记本:toy example uploaded here 目标:将图例中使用的默认比率值
我正在使用 Plotly python 库生成一个带有几个 fiddle 图和几个填充散点图的图形。无论什么订单我都有个人fig.add_trace在我的代码中调用, fiddle 图总是在散点图后面
我将图表的大小配置为 Shiny 但图表之间仍有空白区域 它们在配置高度和宽度之前显示为旧区域 这是我的代码 plot1_reactive % layout(xaxis = xaxis,
我想弄清楚如何组织一个包含多个应用程序的破折号项目。所有示例都是单页应用程序,我希望将多个破折号组织为一个项目,由 gunicorn 运行(在 docker 容器内): dash-project/
我之前做了一些解决方法来在 Julia Plotly 中实现精彩的子图,但目前正在努力解决一个更复杂的问题。下面有三种方法可以完成这项工作。 draw1 完美地完成了,但不适用于我的情况,draw2
我的子图之间有很大的空间。在 matplotlib 中,有一种称为紧密布局的布局可以消除这种情况。 plotly 有没有类似的布局?我正在 iPython 笔记本中绘图,因此空间有限。请参阅下图中的空
我正在尝试获取我提前生成的 cbrewer Reds 颜色图。但是,当我尝试使用它时,我仍然得到一些默认的颜色图。我究竟做错了什么?这是 plotly :https://plot.ly/~smirno
我一直在使用 plot.ly 并希望将多个跟踪分组到图例中的同一个键。 我有显示有关特定用户的数据的子图。我想让每个键代表一个用户,而不是 user.data1、user.data2 等。 这是我现在
我有下面这张图,我想把除点和三角形以外的所有东西都去掉,意思是横纵轴上的数字和小竖线,我该怎么做? 这是图片: 这是我的代码: x0 = np.average(triangleEdges,axis=0
我是一名优秀的程序员,十分优秀!