我在matplotlib中看到过关于绘制两个六进制 map 之间差异的帖子.我找不到任何东西执行相同的过程,除了Plotly的六进制 map 盒子图.如果我有两个独立的六进制子图(t, y)
,是否有可能产生一个减go t
和y
之间的差异的图?
import pandas as pd
import plotly.express as px
import plotly.graph_objs as go
import plotly.figure_factory as ff
from plotly.subplots import make_subplots
data = pd.DataFrame({
'Cat': ['t','y','y','t','t','t','t','y','y','y','t','y'],
'LAT': [5,6,7,5,6,7,5,6,7,5,6,7],
'LON': [10,11,12,10,11,12,10,11,12,10,11,12],
})
data = pd.concat([data]*5)
df_t = data[data['Cat'] == 't']
df_y = data[data['Cat'] == 'y']
fig = make_subplots(
rows = 2,
cols = 1,
subplot_titles = ('t', 'y'),
specs = [[{"type": "choroplethmapbox"}], [{"type": "choroplethmapbox"}]],
vertical_spacing = 0.05,
horizontal_spacing = 0.05
)
fig2 = ff.create_hexbin_mapbox(data_frame=df_t,
lat="LAT", lon="LON",
nx_hexagon=5,
opacity=0.5,
labels={"color": "Point Count"},
mapbox_style='carto-positron',
)
fig3 = ff.create_hexbin_mapbox(data_frame=df_y,
lat="LAT", lon="LON",
nx_hexagon=5,
opacity=0.5,
labels={"color": "Point Count"},
mapbox_style='carto-positron',
)
fig.add_trace(fig2.data[0], row=1,col=1)
fig.update_mapboxes(zoom=4, style='carto-positron')
fig.add_trace(fig3.data[0], row=2,col=1)
fig.update_mapboxes(zoom=4, style='carto-positron')
fig.update_layout(height=600, margin=dict(t=20,b=0,l=0,r=0))
fig.show()
预期输出:
t
的左下框有15分,y
有5分.所以总分是10.中间的框都有10分,所以结果是0.右上角t
赔5,y
赔15,得-10.但我会将vmin
设置为0,以确保没有负值.
编辑2:
如果我使用不同大小的数组更改输入数据,并将MIN_COUNT=1作为参数,则会返回错误.
data = pd.DataFrame({
'Cat': ['t','y','y','t','t','t','t','y','y','y','t','y','y'],
'LAT': [5,6,7,5,6,7,5,6,7,5,6,7,8],
'LON': [10,11,12,10,11,12,10,11,12,10,11,12,8],
})
---------------------------------------------------------------------------
ValueError Traceback (most recent call last) /var/folders/bf/09nyl3td65j2lty5m7138ndw0000gn/T/ipykernel_78237/2142200526.py in <module>
47
48 fig = go.Figure(fig2)
---> 49 fig.data[0]['z'] = (fig2.data[0]['z'] - fig3.data[0]['z']).clip(min=0)
50 cmax, cmin = max(fig.data[0]['z']), min(fig.data[0]['z'])
51
ValueError: operands could not be broadcast together with shapes (3,) (4,)