小编mas*_*chu的帖子

如何定位和对齐matplotlib图形图例?

我有一个带有两个子图的图,分为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"也是如此.

谢谢你的帮助,

马丁

python matplotlib legend

20
推荐指数
2
解决办法
4万
查看次数

Matplotlib轴标签:如何找出它们的位置?

我写了一个例程来绘制大气模型输出的垂直横截面.一个例子如下所示.我想做的是显示两个垂直轴:在左边我在对数刻度上显示压力值,在右边我以千米为单位显示高度.我认为在模型水平位置显示高度会很好 - 这就是为什么它们是不规则间隔的.一切都很好,除了右边的标签在底部附近重叠.我发现我可以使用隐藏特定标签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)

python matplotlib

6
推荐指数
2
解决办法
5569
查看次数

如何找到numpy数组中更大的最近值?

我想获取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]可能会给我所需的指数.然而,这看起来相当复杂,我担心它可能在多维数组的情况下破裂.有什么建议如何改善这个?

python indexing numpy

6
推荐指数
2
解决办法
5488
查看次数

pandas groupby:有效的条件聚合?

我有一个包含不同列的数据框,并希望在每个组具有最小数量的有效成员的情况下计算组的平均值。我使用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)

python aggregate pandas

5
推荐指数
1
解决办法
1443
查看次数

如何"漂亮打印"python pandas DatetimeIndex

我是大熊猫的新手,仍然对它能做什么感到惊讶,虽然有时也会做事情;-)

我设法编写了一个小脚本,用于报告时间序列中遇到的缺失值的数量,无论是在每个月还是在系列的每一年.下面是使用一些虚拟数据进行演示的代码.

如果我打印出返回的结果(print cntyprint 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)

python format datetime pandas

2
推荐指数
1
解决办法
3078
查看次数

Insert a nested schema into a database with fastAPI?

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)

python-3.x pydantic fastapi

2
推荐指数
1
解决办法
1432
查看次数