小编gbo*_*ffi的帖子

如何更改matplotlib现有轴的子图投影?

我正在尝试构造一个简单的函数,它接受一个subplot instance(matplotlib.axes._subplots.AxesSubplot)并将其投影转换为另一个投影,例如,转换为其中一个cartopy.crs.CRS投影.

这个想法看起来像这样

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

def make_ax_map(ax, projection=ccrs.PlateCarree()):
    # set ax projection to the specified projection
    ...
    # other fancy formatting
    ax2.coastlines()
    ...

# Create a grid of plots
fig, (ax1, ax2) = plt.subplots(ncols=2)
# the first subplot remains unchanged
ax1.plot(np.random.rand(10))
# the second one gets another projection
make_ax_map(ax2)
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用fig.add_subplot()功能:

fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(121)
ax1.plot(np.random.rand(10))

ax2 = fig.add_subplot(122,projection=ccrs.PlateCarree())
ax2.coastlines()
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个适当的matplotlib方法来改变定义的子图轴投影.不幸的是,阅读matplotlib API没有帮助.

python matplotlib subplot cartopy

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

为什么我不能使用星号表达式?

我的代码

$ python
Python 3.5.2 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = (1, 2)
>>> '%d %d %d' % (0, *a)
'0 1 2'
>>> '%d %d %d' % (*a, 3)
'1 2 3'
>>> '%d %d' % (*a)
  File "<stdin>", line 1
SyntaxError: can't use starred expression here
>>> 
Run Code Online (Sandbox Code Playgroud)

我的问题,为什么?

用更严肃的语气:我想要一个答案或参考,详细说明使用星号表达的所有细节,因为碰巧我有时会对其行为感到惊讶......

附录

为了反映我的问题后面的一些启发性评论,我添加了以下代码

>>> '%d %d' % (, …
Run Code Online (Sandbox Code Playgroud)

python python-3.5

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

IPython 5.0和控制台中的键绑定

IPython的新版本不再依赖,readline而是使用纯Python库prompt-toolkit,解决Apple和Windows系统上的维护问题.

一个新功能是能够编辑多行代码块,使用光标键在代码块中自由移动 - 至少对我来说这是一个问题:因为ret在代码中插入一个新行,整个块传递给你要使用快捷翻译alt+ ret或可能是不太方便的键序列esc之后ret.

我说,这是一个问题,因为我选择的终端模拟器是XTerm,并且在许多Linux发行版中,快捷方式alt+ ret没有传递给应用程序,但它直接由运行IPython的XTerm使用,以切换所述终端的屏幕丰满度(@ThomasDickey,xterm的mantainer和共同作者指出,默认情况下,xterm无需向Enter应用程序发送修改器位,即使在解除Fullscreen操作时也是如此).

出于这个原因,我想至少修改这个特定的IPython密钥绑定.

我已经找到了readline适用于新版5.0版本的IPython 的前一版本(基于版本)的说明(有点).

我需要的是指导,让我在IPython的用户文档中找到可以绑定的可能操作的名称,与操作绑定的快捷方式的名称以及配置新键绑定时要遵循的过程.

如果没有这种类型的规范答案,我可能会对配方完成这个特定的键绑定感到满意,条件是配方仍然适用于IPython 6.0

python keyboard-shortcuts xterm ipython

20
推荐指数
1
解决办法
881
查看次数

读取由行号指定的两行之间的行

我如何阅读两条特定线之间的所有线?

让我们说第23行是我要开始的地方,而第56行是要读取的最后一行,但它不是文件的结尾.

我如何阅读23至56行?我将把它们输出到另一个文件.

bash shell

15
推荐指数
3
解决办法
1万
查看次数

Python for和if在一行上

我有python的问题.

我做了一个简单的清单:

>>> my_list = ["one","two","three"]
Run Code Online (Sandbox Code Playgroud)

我想创建一个"单行代码"来查找字符串.

例如,我有这个代码:

>>> [(i) for i in my_list if i=="two"]
['two']
Run Code Online (Sandbox Code Playgroud)

但是当我看到变量是错误的时(我找到了我的列表的最后一个值):

>>> print i
three
Run Code Online (Sandbox Code Playgroud)

为什么我的变量包含最后一个元素而不是我想要找到的元素?

python for-loop if-statement list-comprehension python-2.7

15
推荐指数
5
解决办法
7万
查看次数

在地图上绘制点,但错误代码为“ValueError: 'box_aspect' 和 'fig_aspect' 必须为正”

我正在尝试将点的集合绘制到华盛顿州金县的图形上。

我可以使用以下代码显示图形:

fig, ax = plt.subplots(figsize = (15,15))
kings_county.plot(ax=ax)
Run Code Online (Sandbox Code Playgroud)

这给了我图形。然后,我从加载的 csv 的纬度/经度中读取点。

df = pd.read_csv('kc_house_data_train.csv')
crs = {'init': 'epsg:4326'}
Run Code Online (Sandbox Code Playgroud)

这会将所有点放入一个新的数据框中

geometry = [Point(x,y) for x,y in zip(df.lat,df.long)]

geo_df = gpd.GeoDataFrame(df, # specifify your dataframe
                          crs = crs, # this is your coordinate system
                          geometry = geometry) # specify the geometry list we created
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时

fig, ax = plt.subplots(figsize = (40,40))
kings_county.plot(ax=ax, alpha = 0.4, color = 'grey', aspect = 'auto')
geo_df[geo_df.price >= 750000].plot(ax = ax , markersize = 20, color …
Run Code Online (Sandbox Code Playgroud)

python matplotlib aspect-ratio

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

在markdown单元格中内联svg图像

我的问题与出版自备笔记本的愿望有关

我的笔记本中有一个Markdown单元格,它引用了一个外部图像文件

so far

![](example.svg "Example")

so good
Run Code Online (Sandbox Code Playgroud)

是否可以内联MD单元格中的文件内容?

markdown jupyter jupyter-notebook

11
推荐指数
4
解决办法
3667
查看次数

让Anaconda的tkinter了解系统字体或为Anaconda安装新字体

我在Debian Sid笔记本上安装了两个Python,⑴系统的Python(v.2.7)包含一些实用程序包(包括Tkinter)和⑵Anaconda 的Python 3.

很容易看出两个Python发行版可以使用哪些(好吧,这里有多少......)字体.

Python 2

>>> from Tkinter import Tk
>>> from tkFont import families
>>> Tk(); available = families()   ### Tk() is needed to have a running tcl interpreter
<Tkinter.Tk instance at 0x7f977bcbfb90>
>>> len(available)
3011
Run Code Online (Sandbox Code Playgroud)

Python 3

>>> from tkinter import Tk
>>> from tkinter.font import families
>>> Tk() ; available = families()
<tkinter.Tk object .>
>>> len(available)
68
Run Code Online (Sandbox Code Playgroud)

在我看来,Anaconda tkinter只关注分发附带的基本X字体,请参阅下面的编辑.

你知道一个程序吗?

  • 让Anaconda tkinter了解系统字体(首选替代品)或
  • 在Anaconda的树中安装一些字体,以便tkinter可以使用它们? …

python fonts tkinter fontconfig anaconda

10
推荐指数
1
解决办法
1960
查看次数

将笔记本生成的 HTML 片段转换为 LaTeX 和 PDF

我的笔记本里有时会有

from IPython.display import display, HTML
...
display(HTML('<h3>The %s is important!</h3>'%question_of_the_day))
...
Run Code Online (Sandbox Code Playgroud)

但是当我后来将笔记本转换为.pdf(使用 LaTeX 文件的中间步骤)时,我得到的.pdf只是

<IPython.core.display.HTML object>

我的问题是,是否有可能说服jupyter nbconvert --to pdf ...(并最终说服pandoc)转换我以编程方式插入到输出单元中的 HTML 代码片段?

python ipython jupyter jupyter-notebook

8
推荐指数
1
解决办法
1481
查看次数

Matplotlib 中的 3D 参数曲线不考虑 zorder。解决方法?

我正在使用 Matplotlib 设计一个三维插图。一切都很好,除了(红色)参数曲线得到错误的 zorder 而(绿色)参数曲面完全正确绘制。

由以下代码生成的输出: 由以下代码生成的输出

我知道 Matplotlib 在准确计算对象的 zorder 方面的能力有限,但由于它可以为参数曲面执行此操作,因此它似乎是 Matplotlib 中的一个错误。

也就是说,有没有办法强制正确的 z-ordering 只是为了让事情快速工作?似乎我只能说正确的透明蓝色平面位于其他一切之上。但是,将 zorder 参数放入 PolyCollection 似乎没有任何效果,并且将显式 zorder 参数放入绘制读取线的绘图函数中会弄乱其相对于绿色表面的顺序。

有没有办法将正确的蓝色透明表面强加于一切之上?这是我到目前为止的代码:

#!/bin/env python3

from pylab import *
from mpl_toolkits.mplot3d import *

from matplotlib.collections import PolyCollection
from matplotlib.colors import colorConverter
from matplotlib.patches import FancyArrowPatch

rc('text', usetex=True)
rc('font', size=20)

fig = figure(figsize=(11,6))
ax = fig.gca(projection='3d')

ax.set_axis_off()

def f(x,t):
    return t/2 * 0.55*(sin(2*x)+0.4*x**2-0.65)

c_plane   = colorConverter.to_rgba('b', alpha=0.15)

N = 50
y = linspace(-1,1,N)
t = linspace(0,2,N)
yy, tt = meshgrid(y, t) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib mplot3d

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