首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何绘制轴线上英里和米的组合(例如7.5英里100米,7.5英里200米,8英里100米....)

如何绘制轴线上英里和米的组合(例如7.5英里100米,7.5英里200米,8英里100米....)
EN

Stack Overflow用户
提问于 2019-07-19 16:13:44
回答 2查看 112关注 0票数 0

我需要用Bokeh绘制一些数据,它的距离是x轴。然而,我得到的距离数据是"7英里100米,7英里200米“等格式。

做这件事最好的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-23 21:53:23

最后我算出来了,我只是把里程(比如7.5英里)和米(比如400米)换算成英里(比如7.75英里)。然后,我使用tickformatter将特定点显示为米。谢谢你的帮助

票数 0
EN

Stack Overflow用户

发布于 2019-07-19 17:07:26

应将距离转换为米或英里。我做了一个小例子,其中所有的距离都转换为米。您还可以添加一个显示原始距离(组合英里/米)的悬停工具。

代码语言:javascript
运行
复制
import pandas as pd
from bokeh.io import show
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral5
from bokeh.plotting import figure

data = {'day': [1, 2, 3, 4, 5], 'distance': ['7.5 Miles 100m', '7.5 Miles 200m', '7 Miles 500m', '5 Miles 300m', '8 Miles 5m'], 'color': Spectral5}
df = pd.DataFrame.from_dict(data)
#Split distance columns on spaces => distance in miles | 'miles' | distance in meters + 'm'
distancedf = df["distance"].str.split(" ", n = 2, expand = True)
#Convert miles column to floats and multiply by 1609.344 to get the distance in meters
distancedf[0] = distancedf[0].astype(float)
distancedf[0] *= 1609.344
#Remove all non numeric characters from column ('m') and convert to floats
distancedf[2].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')
distancedf[2] = distancedf[2].astype(float)
#Add the sum of miles + meters to the first dataframe and use this dataframe for plotting
df['distanceinm'] = distancedf[0] + distancedf[2]

#Draw a plot
source = ColumnDataSource(df)
print(source.data)
p = figure(plot_height=250)
p.xaxis.axis_label = "Day"
p.yaxis.axis_label = "Distance in meters"
p.vbar(x='day', top='distanceinm', width=0.75, color='color', source=source)
show(p)

如果要同时显示以米为单位的距离和以英里为单位的距离,则必须添加额外的轴。这可以在下面的示例中看到:

代码语言:javascript
运行
复制
import pandas as pd
from bokeh.io import show
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral5
from bokeh.plotting import figure
from bokeh.models import LinearAxis, Range1d
from bokeh.transform import dodge


data = {'day': [1, 2, 3, 4, 5], 'distance': ['7.5 Miles 100m', '7.5 Miles 200m', '7 Miles 500m', '5 Miles 300m', '8 Miles 5m'], 'color': Spectral5}
df = pd.DataFrame.from_dict(data)
#Split distance columns on spaces => distance in miles | 'miles' | distance in meters + 'm'
distancedf = df["distance"].str.split(" ", n = 2, expand = True)
#Convert miles column to floats and multiply by 1609.344 to get the distance in meters
df['distanceinmiles'] = distancedf[0].astype(float)
#Remove all non numeric characters from column ('m') and convert to floats
distancedf[2].replace(regex=True,inplace=True,to_replace=r'\D',value=r'')
df['distanceinmeters'] = distancedf[2].astype(float)

#Draw a plot
source = ColumnDataSource(df)
p = figure(plot_height=500, y_range=(0, df['distanceinmiles'].max()))
p.yaxis.axis_label = "Distance in Miles"
#Add extra Y axis
p.extra_y_ranges = {'meters': Range1d(start=0, end=df['distanceinmeters'].max())}
p.add_layout(LinearAxis(y_range_name="meters", axis_label='Distance in Meters'), 'right')
p.vbar(x=dodge('day', -0.21), top='distanceinmiles', width=0.4, color='color', source=source)
p.vbar(x=dodge('day', 0.21), top='distanceinmeters', width=0.4, color='color', source=source, y_range_name="meters")
p.xaxis.axis_label = "Day"
show(p)

(第一条是以英里为单位的距离(在左边的Y轴上看到),第二条是以米为单位的距离(在右边的Y轴上看到))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57108242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档