我有一个带有两个子图的图,分为2行和1列.我可以添加一个漂亮的图形传奇
fig.legend((l1, l2), ['2011', '2012'], loc="lower center",
ncol=2, fancybox=True, shadow=True, prop={'size':'small'})
Run Code Online (Sandbox Code Playgroud)
但是,这个图例位于图形的中心,而不是像我想要的那样位于轴的中心之下.现在,我可以获得我的轴坐标
axbox = ax[1].get_position()
Run Code Online (Sandbox Code Playgroud)
理论上我应该能够通过使用元组指定loc关键字来定位图例:
fig.legend(..., loc=(axbox.x0+0.5*axbox.width, axbox.y0-0.08), ...)
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了图例左对齐,以便loc指定图例框的左边/角,而不是中心.我搜索了对齐,水平对齐等关键字,但找不到任何关键字.我也尝试获取"图例位置",但是图例没有*get_position()*方法.我读到了关于*bbox_to_anchor*但是在应用于图形图例时无法理解它.这似乎是针对轴传说.
或者:我应该使用移位轴图例吗?但那么,为什么首先会有传说?并且不知何故,必须能够"居中对齐"图形图例,因为loc ="lower center"也是如此.
谢谢你的帮助,
马丁
我写了一个例程来绘制大气模型输出的垂直横截面.一个例子如下所示.我想做的是显示两个垂直轴:在左边我在对数刻度上显示压力值,在右边我以千米为单位显示高度.我认为在模型水平位置显示高度会很好 - 这就是为什么它们是不规则间隔的.一切都很好,除了右边的标签在底部附近重叠.我发现我可以使用隐藏特定标签ax2.get_yticklabels()[index].set_visible(False).我的问题是:如何确定要隐藏的标签(索引)?我相信应该可以找出刻度标签的位置(在轴或图形坐标中).然后我可以使用阈值距离
yp = -1
for t in ax2.get_yticklabels():
y = t.get_position().y0 # this doesn't yield any useful bbox!
if y-yp < threshold:
t.set_visible(False)
else:
yp = y
Run Code Online (Sandbox Code Playgroud)
不幸的是,我还没有找到获得标签坐标的方法.任何提示?
这是示例图:

以下是完成绘图的完整代码(数据是二维数组,x是纬度,y是压力值):
def plotZM(data, x, y, plotOpt=None):
"""Create a zonal mean contour plot of one variable
plotOpt is a dictionary with plotting options:
'scale_factor': multiply values with this factor before plotting
'units': a units label for the colorbar
'levels': use list of values as contour intervals
'title': a …Run Code Online (Sandbox Code Playgroud) 我想获取numpy数组中最接近的值的索引,该索引大于我的搜索值.示例:findNearestAbove(np.array([0.,1.,1.4,2.]), 1.5)应返回3(索引为2).
我知道我可以得到最近的索引np.abs(a-value).argmin(),我发现它min(a[np.where(a-value >= 0.)[0]])返回所需的数组值.因此,np.where(a == min(a[np.where(a-value >= 0.)[0]]))[0]可能会给我所需的指数.然而,这看起来相当复杂,我担心它可能在多维数组的情况下破裂.有什么建议如何改善这个?
我有一个包含不同列的数据框,并希望在每个组具有最小数量的有效成员的情况下计算组的平均值。我使用groupby,filter和mean尝试了以下方法。似乎可行,但我想知道是否有更有效的解决方案?
import pandas as pd
import numpy as np
df = pd.DataFrame({'id' : ['one', 'one', 'two', 'three', 'two',
'two', 'two', 'one', 'three', 'one'],
'idprop' : [1., 1., 2., 3., 2., # property corresponding to id
2., 2., 1., 3., 1.],
'x' : np.random.randn(10),
'y' : np.random.randn(10)})
# set a couple of x values to nan
s = df['x'].values
s[s < -0.6] = np.nan
df['x'] = s
g = df.groupby('id', sort=False)
# filter out small group(s) with less than 3 valid …Run Code Online (Sandbox Code Playgroud) 我是大熊猫的新手,仍然对它能做什么感到惊讶,虽然有时也会做事情;-)
我设法编写了一个小脚本,用于报告时间序列中遇到的缺失值的数量,无论是在每个月还是在系列的每一年.下面是使用一些虚拟数据进行演示的代码.
如果我打印出返回的结果(print cnty或print cntm),一切都看起来不错,但我想根据我的数据的分辨率格式化指数的日期时间值,也就是我希望拥有2000 1000 10 15的,而不是2000-12-31 1000 10 15为年产量2000-01 744 10 15为月产量.有没有一种简单的方法在pandas中执行此操作,或者我必须经历一些循环并在打印之前将事物转换为"普通"python.注意:我事先并不知道我有多少数据列,所以每行都有固定格式字符串对我来说不起作用.
import numpy as np
import pandas as pd
import datetime as dt
def make_data():
"""Make up some bogus data where we know the number of missing values"""
time = np.array([dt.datetime(2000,1,1)+dt.timedelta(hours=i)
for i in range(1000)])
wd = np.arange(0.,1000.,1.)
ws = wd*0.2
wd[[2,3,4,8,9,22,25,33,99,324]] = -99.9 # 10 missing values
ws[[2,3,4,10,11,12,565,644,645,646,647,648,666,667,669]] =-99.9 # 15 missing values
data = np.array(zip(time,wd,ws), …Run Code Online (Sandbox Code Playgroud) I have recently come to know about fastAPI and worked my way through the tutorial and other docs. Although fastAPI is pretty well documented, I couldn't find information about how to process a nested input when working with a database.
For testing, I wrote a very small family API with two models:
class Member(Base):
__tablename__ = 'members'
id = Column(Integer, primary_key=True, server_default=text("nextval('members_id_seq'::regclass)"))
name = Column(String(128), nullable=False)
age = Column(Integer, nullable=True)
family_id = Column(Integer, ForeignKey('families.id', deferrable=True, initially='DEFERRED'), nullable=False, index=True)
family = …Run Code Online (Sandbox Code Playgroud)