我正在尝试使用绘图来比较使用误差线作为置信区间的回归模型的系数。我使用以下代码来绘制它,使用变量作为y散点图中的分类轴。问题是这些点是重叠的,我想像设置时在条形图中发生的那样避开它们barmode='group'。如果我有一个数字轴,我可以手动躲避它们,但我做不到。
fig = px.scatter(
df, y='index', x='coef', text='label', color='model',
error_x_minus='lerr', error_x='uerr',
hover_data=['coef', 'pvalue', 'lower', 'upper']
)
fig.update_traces(textposition='top center')
fig.update_yaxes(autorange="reversed")
Run Code Online (Sandbox Code Playgroud)
使用构面,我几乎得到了我想要的结果,但有些标签超出了绘图范围并且不可见:
fig = px.scatter(
df, y='model', x='coef', text='label', color='model',
facet_row='index',
error_x_minus='lerr', error_x='uerr',
hover_data=['coef', 'pvalue', 'lower', 'upper']
)
fig.update_traces(textposition='top center')
fig.update_yaxes(visible=False)
fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
Run Code Online (Sandbox Code Playgroud)
有人对于在第一种情况下躲避点或在第二种情况下显示标签有任何想法或解决方法吗?
提前致谢。
PS:这是我为生成绘图而制作的随机假数据框:
df = pd.DataFrame({'coef': {0: 1.0018729737113143,
1: 0.9408864645423858,
2: 0.29796556981484884,
3: -0.6844053575764955,
4: -0.13689631932690113,
5: 0.1473096200402363,
6: 0.9564712505670716,
7: 0.956099003887811,
8: 0.33319108930207175,
9: -0.7022778825729681,
10: -0.1773916842612131,
11: 0.09485417304851751},
'index': {0: 'const',
1: …Run Code Online (Sandbox Code Playgroud) 我想使用以下简单的代码叠加两个直方图,我目前只显示一个与另一个相邻的直方图。这两个数据帧的长度不同,但叠加它们的直方图值仍然有意义。
import plotly.express as px
fig1 = px.histogram(test_lengths, x='len', histnorm='probability', nbins=10)
fig2 = px.histogram(train_lengths, x='len', histnorm='probability', nbins=10)
fig1.show()
fig2.show()
Run Code Online (Sandbox Code Playgroud)
纯情节,这是从文档中复制的方式:
import plotly.graph_objects as go
import numpy as np
x0 = np.random.randn(500)
# Add 1 to shift the mean of the Gaussian distribution
x1 = np.random.randn(500) + 1
fig = go.Figure()
fig.add_trace(go.Histogram(x=x0))
fig.add_trace(go.Histogram(x=x1))
# Overlay both histograms
fig.update_layout(barmode='overlay')
# Reduce opacity to see both histograms
fig.update_traces(opacity=0.75)
fig.show()
Run Code Online (Sandbox Code Playgroud)
我只是想知道情节表达是否有任何特别惯用的方式。希望这也能说明 plotly 和 plotly express 之间的完整性和不同层次的抽象。
我plotly express用于散点图。标记的颜色由我的数据框的变量定义,如下例所示。
import pandas as pd
import numpy as np
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df[df.species.isin(['virginica', 'setosa'])], x="sepal_width", y="sepal_length", color="species")
fig.show()
Run Code Online (Sandbox Code Playgroud)
当我添加此变量的另一个实例时,颜色映射会发生变化(首先,'virginica',是红色,然后是绿色)。
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",size='petal_length', hover_data=['petal_width'])
fig.show()
Run Code Online (Sandbox Code Playgroud)
添加变量时如何保持颜色的映射?
我正在尝试在 Flask 中显示plotly.express条形图。但它正在给予'Figure' object has no attribute savefig error。使用时图像可以正确显示fig.show()。
import matplotlib.pyplot as plt
import plotly.express as px
figs = px.bar(
comp_df.head(10),
x = "Company",
y = "Staff",
title= "Top 10 departments",
color_discrete_sequence=["blue"],
height=500,
width=800
)
figs.savefig('static/images/staff_plot.png')
# fig.show()
return render_template('plot.html', name='new_plot', url='static/images/staff_plot.png')
Run Code Online (Sandbox Code Playgroud)
中plot.html,图像显示如下:
<img src={{ url}} >
Run Code Online (Sandbox Code Playgroud) 抱歉,帖子太长了。我是 python 和 plotly 的新手,所以请耐心等待。
我正在尝试制作带有趋势线的散点图,以向我展示包括回归参数在内的图例图例,但出于某种原因,我不明白为什么px.scatter不向我展示我的轨迹图例。这是我的代码
fig1 = px.scatter(data_frame = dataframe,
x="xdata",
y="ydata",
trendline = 'ols')
fig1.layout.showlegend = True
fig1.show()
Run Code Online (Sandbox Code Playgroud)
这会显示散点图和趋势线,但即使我试图覆盖它也没有图例。
我曾经pio.write_json(fig1, "fig1.plotly")将它导出到 jupyterlab plotly 图表工作室并手动添加图例,但即使我启用了它,它也不会显示在图表工作室中。
我打印了变量print(fig1)以查看发生了什么,这是(部分)结果
(Scatter({
'hovertemplate': '%co=%{x}<br>RPM=%{y}<extra></extra>',
'legendgroup': '',
'marker': {'color': '#636efa', 'symbol': 'circle'},
'mode': 'markers',
'name': '',
'showlegend': False,
'x': array([*** some x data ***]),
'xaxis': 'x',
'y': array([*** some y data ***]),
'yaxis': 'y'
}), Scatter({
'hovertemplate': ('<b>OLS trendline</b><br>RPM = ' ... ' <b>(trend)</b><extra></extra>'),
'legendgroup': '',
'marker': {'color': '#636efa', …Run Code Online (Sandbox Code Playgroud) python data-visualization plotly plotly-python plotly-express
我正在尝试绘制具有离散数值 x 值的散点图。问题在于Plotly将值解释为连续的并且生成的点间隔不均匀。在Seaborn我可以通过将 x 值转换为 来解决这个问题str,但这在 中不起作用Plotly。有什么解决办法吗?MWE如下:
4489058292 0.60
4600724046 0.26
6102975308 0.19
6122589624 0.10
4467367136 1.67
6008680375 2.50
4588967207 0.21
4941295226 0.34
4866979526 0.18
4906915418 0.38
Run Code Online (Sandbox Code Playgroud)
test_df = pd.read_clipboard(sep="\s+", names=["ID", "Value"], index_col=0)
fig = px.scatter(
test_df,
x=test_df.index.astype(str),
y=test_df,
)
fig.update_layout(showlegend=False)
Run Code Online (Sandbox Code Playgroud) 我用来plotly express绘制boxplot如下图所示:
px.box(data_frame=df,
y="price",
x="products",
points="all")
Run Code Online (Sandbox Code Playgroud)
然而,产品的盒盆以相同的颜色显示。它们是四种产品。我想用不同的颜色为每个颜色着色,使用附加参数color_discrete_sequence不起作用。
我想通过绘图制作类似于以下示例的动画条形图:https://plotly.com/python/animations/
我有以下代码:
fig = px.bar(
eu_vaccine_df.sort_values('date'),
x='country', y='people_vaccinated_per_hundred',
color='country',
animation_frame='date',
animation_group='country',
hover_name='country',
range_y=[0,50],
range_x=[0,30]
)
fig.update_layout(
template='plotly_dark',
margin=dict(r=10, t=25, b=40, l=60)
)
fig.show()
Run Code Online (Sandbox Code Playgroud)
我相信这个问题与我的数据框的“日期”列有关。目前它是一个日期时间,并已使用 pd.to_datetime(covid_df['date'] 进行转换
我得到的错误如下:
ValueError Traceback (most recent call last)
<ipython-input-185-ff9c8cc72d87> in <module>
7 hover_name='country',
8 range_y=[0,50],
----> 9 range_x=[0,30]
10 )
11 fig.update_layout(
/opt/conda/lib/python3.7/site-packages/plotly/express/_chart_types.py in bar(data_frame, x, y, color, facet_row, facet_col, facet_col_wrap, facet_row_spacing, facet_col_spacing, hover_name, hover_data, custom_data, text, base, error_x, error_x_minus, error_y, error_y_minus, animation_frame, animation_group, category_orders, labels, color_discrete_sequence, color_discrete_map, color_continuous_scale, range_color, color_continuous_midpoint, opacity, orientation, barmode, …Run Code Online (Sandbox Code Playgroud) custom_data当通过/范例以plotly express 创建自定义悬停卡时hovertemplate,颜色显示在其右侧。例如,此处在“a=1”右侧显示“蓝色”。怎样才能去掉“蓝色”呢?
import pandas as pd
import plotly.express as px
df = pd.DataFrame(dict(x=["a"], y=[1], color=["blue"], hover=["a=1"]))
fig = px.bar(df, "x", "y", "color", custom_data=["hover"])
fig.update_traces(hovertemplate="%{customdata[0]}")
Run Code Online (Sandbox Code Playgroud)
(可以在此处访问 Colab 笔记本)
我正在可视化包含 400K 到 250 万个点的散点图。我预计在可视化之前需要进行下采样,但为了看看我在plotlyexpress 中使用 400k 数据集进行了多少试点测试,并且绘图快速、美观且响应迅速地弹出。
为了制作交互式图形,我确实需要使用plotly.graph_objects,因为我需要具有不同色阶的多条迹线,所以我用graph_objects制作了基本相同的图形,它不仅速度较慢,还使我的计算机崩溃了。
我真的很想尽可能少地进行下采样,并且我对这两种方法之间的纯粹性能差异感到惊讶,所以我想这可以归结为我的问题:
为什么存在如此大的性能差异?是否可以更改 graph_objects 中的布局/图形/任何参数以缩小差距?
这是一个片段,显示了我所说的基本相同的图表的含义:
fig = go.Figure()
fig.add_trace(go.Scatter(x = x_values, y = y_values, opacity = opacity, marker = {
'size': size,
'color': community,
'colorscale': colorscale
}))
Run Code Online (Sandbox Code Playgroud)
pacmap_map = px.scatter(x = x_values, y = y_values, color_continuous_scale=colorscale, opacity = opacity, color = community)
pacmap_map.update_traces(marker = {
'size': size
})
Run Code Online (Sandbox Code Playgroud)
我本来期望性能是相同的,或者至少在相同的范围内,但 Express 的工作就像一个梦想,而 graph_objects 会崩溃 jupyter 内核以及它运行的任何 IDE,所以有很大的差异。