我正在尝试绘制以公里/小时为单位的风速。左边是公里/小时。现在,我想在图的右侧以bft为单位添加一个比例。Bft标度不是线性的。我想(手动)将bft数字(0-12)添加到以km / h为单位的特定风速中。例如。在与10.2km / h相同的高度(左标度)上,我希望数字2在右标度上书写(2bft = 7.4-13km / h)
有谁知道,是否有办法手动添加这种非线性比例?
视觉示例:picture:顶部是当前的外观,底部是我想要的外观
该可视示例的当前代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from datetime import datetime
from datetime import timedelta
from os import path
from os import system
import sys
from math import exp
#data processing
print("data-ready")
from matplotlib import use
use('Agg')
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
print("plotlib ready")
plt.figure(1)
#multiple subplots for temprature, pressure, wind, humidity
#only wind on axs[1] is interesting here
fig, axs = plt.subplots(4, sharex=True, sharey=False)
axs[1].plot(xg, gusts,'bo')
axs[1].plot(x, winds,'black')
fig.set_figwidth(9)
fig.set_figheight(7)
axs[1].grid()
axs[1].minorticks_on()
axs[1].xaxis.set_minor_locator(mdates.HourLocator())
axs[1].grid(which='major', linestyle='-', color='lightgray')
axs[1].grid(which='minor', linestyle=':', color='lightgray')
axs[1].set_ylabel(u'Windstärke (km/h)\n[Punkte=Böen]')
axs12=axs[1]
ylim=(axs12.get_ylim())
axs12.axhspan(0, 1.85, facecolor='#00ffff', alpha=0.5)
axs12.axhspan(1.85, 7.41, facecolor='#00ff40', alpha=0.5)
axs12.axhspan(7.41, 12.96, facecolor='#80ff00', alpha=0.5)
axs12.axhspan(12.96, 20.37, facecolor='#ffff00', alpha=0.5)
axs12.axhspan(20.37, 29.36, facecolor='#ffc000', alpha=0.5)
axs12.axhspan(29.36, 40.74, facecolor='#ff6000', alpha=0.5)
axs12.axhspan(40.74, 51.86, facecolor='#ff0000', alpha=0.5)
axs12.axhspan(51.86, 62.97, facecolor='#ff0040', alpha=0.5)
axs12.axhspan(62.97, 75.93, facecolor='#ff0080', alpha=0.5)
axs12.axhspan(75.93, 140, facecolor='#ff00ff', alpha=0.5)
axs12.set_ylim(ylim)
#axs[x]...
print("sving")
plt.savefig("some_private_path/mfcPlot.png",bbox_inches = 'tight',pad_inches = 0)
print("done")
不确定这是否是正确的答案,但不能真正将其写为评论。如有需要将取消。
我的建议是基于以下几点:
yticks_val = ax.get_yticks(self, minor=False)
btf_scale_labels = someConversionFunction(yticks_val)
ax1 = ax.twinx()
ytick(yticks_val, btf_scale_labels)
def someConversionFunction(kmh_values)
#do something
return btf_values
编辑
做了一些谷歌搜索。在Beaufort维基百科页面之后,这应该可以完成转换:
kmh_values=[0,10,24]
def kmhToBft(np.array(kmh_values)):
import numpy as np
kmh_lim = np.array([2,5,11,19,28,38,49,61,74,88,102,117,10000])
bft_scale = np.arange(13)
bft_level = (kmh_values[:, None] <= kmh_lim)
bft_values = np.nanmin(
np.where(bft_level, bft_scale, np.nan), axis=1)
return bft_values
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句