Python 中 plotly express 散点图的大小图例
Size legend for plotly express scatterplot in Python
这是一个 Plotly Express 散点图,其标记颜色、大小和符号代表数据框中的不同字段。 symbol有legend,color有colorbar,但是没有说明marker size代表什么。
是否可以显示“尺寸”图例?在图例中,我希望展示一些示例标记尺寸及其各自的值。
类似的 被要求用于 R,我希望在 Python 中得到类似的结果。我试过使用 fig.add_trace()
添加标记,这可行,但我不知道如何使大小相等。
import pandas as pd
import plotly.express as px
import random
# create data frame
df = pd.DataFrame({
'X':list(range(1,11,1)),
'Y':list(range(1,11,1)),
'Symbol':['Yes']*5+['No']*5,
'Color':list(range(1,11,1)),
'Size':random.sample(range(10,150), 10)
})
# create scatterplot
fig = px.scatter(df, y='Y', x='X',color='Color',symbol='Symbol',size='Size')
# move legend
fig.update_layout(legend=dict(y=1, x=0.1))
fig.show()
散点图图像:
谢谢
如果您使用范围内的指标 scale/data,则无法实现此目标。 Plotly 将尝试始终将其解释为公制,即使它 seems/is 在输出中是离散的。所以你的数据必须是一个因素,就像在 R 中一样,因为你正在显示组。一种可能的解决方案是使用列表组件。并将所有内容转换为 str。我分两步完成,所以你可以按照:
import pandas as pd
import plotly.express as px
import random
check = sorted(random.sample(range(10,150), 10))
check = [str(num) for num in check]
# create data frame
df = pd.DataFrame({
'X':list(range(1,11,1)),
'Y':list(range(1,11,1)),
'Symbol':['Yes']*5+['No']*5,
'Color':check,
'Size':list(range(1,11,1))
})
# create scatterplot
fig = px.scatter(df, y='Y', x='X',color='Color',symbol='Symbol',size='Size')
# move legend
fig.update_layout(legend=dict(y=1, x=0.1))
fig.show()
这给出了:
请记住,您还会获得符号标签,因为您现在有两个组!
也许您想在转换为字符串之前 sort
列表中的值!
就像这张图(添加到上面的代码中)
更新
嘿,
是的,但据我所知,仅在 matplotlib 中,而且它在模拟散点图时有点老套。我只能给你看一个来自 matplotlib 的修改示例,但也许它对你有帮助,所以你可以 fiddle 自己解决:
from numpy.random import randn
z = randn(10)
red_dot, = plt.plot(z, "ro", markersize=5)
red_dot_other, = plt.plot(z*2, "ro", markersize=20)
plt.legend([red_dot, red_dot_other], ["Yes", "No"], markerscale=0.5)
这给出:
如您所见,您正在处理两个不同的图,确切地说,每个尺寸图例对应一个图。在传说中,这些地块合并在一起。 Legendsize 通过 markerscale
进一步引导,并链接到每个地块的 markersize
。因为我们有两个具有两个不同标记大小的图,所以我们可以在图例中创建一个具有不同标记大小的图。 markerscale 通常是一个介于 0 和 1 之间的值,但你也可以做 150%,即 1.5。
您可以通过摆弄 matplotlib 中的图例处理程序来实现此目的,请参见此处:
https://matplotlib.org/stable/tutorials/intermediate/legend_guide.html
这是一个 Plotly Express 散点图,其标记颜色、大小和符号代表数据框中的不同字段。 symbol有legend,color有colorbar,但是没有说明marker size代表什么。
是否可以显示“尺寸”图例?在图例中,我希望展示一些示例标记尺寸及其各自的值。
类似的 fig.add_trace()
添加标记,这可行,但我不知道如何使大小相等。
import pandas as pd
import plotly.express as px
import random
# create data frame
df = pd.DataFrame({
'X':list(range(1,11,1)),
'Y':list(range(1,11,1)),
'Symbol':['Yes']*5+['No']*5,
'Color':list(range(1,11,1)),
'Size':random.sample(range(10,150), 10)
})
# create scatterplot
fig = px.scatter(df, y='Y', x='X',color='Color',symbol='Symbol',size='Size')
# move legend
fig.update_layout(legend=dict(y=1, x=0.1))
fig.show()
散点图图像:
谢谢
如果您使用范围内的指标 scale/data,则无法实现此目标。 Plotly 将尝试始终将其解释为公制,即使它 seems/is 在输出中是离散的。所以你的数据必须是一个因素,就像在 R 中一样,因为你正在显示组。一种可能的解决方案是使用列表组件。并将所有内容转换为 str。我分两步完成,所以你可以按照:
import pandas as pd
import plotly.express as px
import random
check = sorted(random.sample(range(10,150), 10))
check = [str(num) for num in check]
# create data frame
df = pd.DataFrame({
'X':list(range(1,11,1)),
'Y':list(range(1,11,1)),
'Symbol':['Yes']*5+['No']*5,
'Color':check,
'Size':list(range(1,11,1))
})
# create scatterplot
fig = px.scatter(df, y='Y', x='X',color='Color',symbol='Symbol',size='Size')
# move legend
fig.update_layout(legend=dict(y=1, x=0.1))
fig.show()
这给出了:
请记住,您还会获得符号标签,因为您现在有两个组!
也许您想在转换为字符串之前 sort
列表中的值!
就像这张图(添加到上面的代码中)
更新
嘿,
是的,但据我所知,仅在 matplotlib 中,而且它在模拟散点图时有点老套。我只能给你看一个来自 matplotlib 的修改示例,但也许它对你有帮助,所以你可以 fiddle 自己解决:
from numpy.random import randn
z = randn(10)
red_dot, = plt.plot(z, "ro", markersize=5)
red_dot_other, = plt.plot(z*2, "ro", markersize=20)
plt.legend([red_dot, red_dot_other], ["Yes", "No"], markerscale=0.5)
这给出:
如您所见,您正在处理两个不同的图,确切地说,每个尺寸图例对应一个图。在传说中,这些地块合并在一起。 Legendsize 通过 markerscale
进一步引导,并链接到每个地块的 markersize
。因为我们有两个具有两个不同标记大小的图,所以我们可以在图例中创建一个具有不同标记大小的图。 markerscale 通常是一个介于 0 和 1 之间的值,但你也可以做 150%,即 1.5。
您可以通过摆弄 matplotlib 中的图例处理程序来实现此目的,请参见此处: https://matplotlib.org/stable/tutorials/intermediate/legend_guide.html