我试图在任一轴上绘制一个没有刻度线或数字的图形(我使用传统意义上的轴,而不是matplotlib命名法!).我遇到的一个问题是matplotlib通过减去值N来调整x(y)ticklabels,然后在轴的末尾添加N.
这可能是模糊的,但下面的简化示例突出了问题,'6.18'是N的违规值:
import matplotlib.pyplot as plt
import random
prefix = 6.18
rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')
frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
xlabel_i.set_visible(False)
xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
xlabel_i.set_fontsize(0.0)
xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
tick.set_visible(False)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想知道的三件事是:
如何首先关闭这种行为(虽然在大多数情况下它是有用的,但并不总是!)我已经查看了matplotlib.axis.XAxis
,找不到任何合适的东西
怎么能让N消失(即X.set_visible(False)
)
还有更好的方法来完成上述任务吗?我的最终情节将是图中的4x4子图,如果这是相关的.
我正在显示一个jpg图像(我将其旋转90度,如果这是相关的),当然轴显示像素坐标.我想转换轴,以便不显示像素数,而是显示我选择的单位 - 无论是弧度,度数,还是我的天文坐标.我知道从像素到(例如)度的转换.以下是我的代码目前的代码片段:
import matplotlib.pyplot as plt
import Image
import matplotlib
thumb = Image.open(self.image)
thumb = thumb.rotate(90)
dpi = plt.rcParams['figure.dpi']
figsize = thumb.size[0]/dpi, thumb.size[1]/dpi
fig = plt.figure(figsize=figsize)
plt.imshow(thumb, origin='lower',aspect='equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)
...所以继续这个,我可以取matplotlib在轴上打印的每个值,并用字符串更改/替换它来输出吗?我想为特定的坐标格式做这个 - 例如,而不是10.44(度)的角度,我希望它读取10 26'24''(即,度,arcmins,arcsecs)
最后在这个主题上,我想要在情节上控制嘀嗒频率.Matplotlib可能每隔50个像素打印一次轴值,但我真的想要每个(例如)度数.
听起来我想要定义某种类型的数组,其中包含我想要显示的像素值及其转换值(度等),可以在xmin/xmax范围内控制采样频率.
Stack Overflow上有matplotlib专家吗?如果是这样,非常感谢您的帮助!为了使这个学习体验更加丰富,我真的很感激在这种matplotlib问题的教程方向上受到了推动.我发现自己对轴,轴,人物,艺术家等感到非常困惑!
干杯,
戴夫
我在交互模式下使用matplotlib向用户显示一个帮助他们输入一系列变量的图.他们可以选择点击"?" 显示此图,然后将重复提示变量.
如果它仍在显示,我怎么知道不重新绘制这个图?
从表面上看,我有这个笨重的(伪ish)代码:
answer = None
done_plot = False
while answer == None:
answer = get_answer()
if answer == '?':
if done_plot:
have_closed = True
##user's already requested a plot - has s/he closed it?
## some check here needed:
have_closed = ?????
if have_closed == False:
print 'You already have the plot on display, will not re-draw'
answer = None
continue
plt.ion()
fig = plt.figure()
### plotting stuff
done_plot = True
answer = None
else:
###have an answer …
Run Code Online (Sandbox Code Playgroud) 我在LaTeX中生成一组文档,我想为整个集合提供一个单一的全局参考书目页面.这是因为每个文档都是页面限制的:我不想占用每个文档底部的引用空间.
这意味着在每种情况下,我想在文中引用,但最后不会产生引用.我正在使用bibtex/natbib来处理引用.
最简单的例子:
\documentclass[]{article}
\bibliographystyle{/usr/share/texmf/bibtex/bst/natbib/plainnat.bst}
\usepackage{natbib}
\begin{document}
In \citet*{MEF2010} I described the method.
\bibliography{bibliography.bib}
\end{document}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?基本上我只是想让它正确引用:
In Bloggs, Blagg and Blog (2010) I described the method.
Run Code Online (Sandbox Code Playgroud)
但最后不要添加引用部分.有任何想法吗?
谢谢,
大卫
我有两个数组,a1和a2.假设len(a2) >> len(a1)
,a1是a2的子集.
我想快速返回a1中所有元素的a2索引.这种时间密集的方式显然是:
from operator import indexOf
indices = []
for i in a1:
indices.append(indexOf(a2,i))
Run Code Online (Sandbox Code Playgroud)
这当然需要很长时间,其中a2很大.我也可以使用numpy.where()(尽管a1中的每个条目在a2中只出现一次),但我不相信它会更快.我也可以只遍历一次大阵列:
for i in xrange(len(a2)):
if a2[i] in a1:
indices.append(i)
Run Code Online (Sandbox Code Playgroud)
但我确信有一种更快,更"笨拙"的方式 - 我查看了numpy方法列表,但找不到合适的东西.
提前谢谢了,
d
我有一些空间分布的数据.我正在绘制它,matplotlib.pyplot.hexbin
并希望更改"背景"(即零值)颜色.下面显示了一个示例 - 我选择的颜色图是matplotlib.cm.jet
:
如何将基色从蓝色更改为白色?我在使用时已经使用了蒙面数组做了类似的事情pcolormesh
,但我无法在hexbin
参数中看到这样做.我的直觉是编辑colourmap本身,但我没有太多经验.
我正在使用matplotlib v.0.99.1.1
我刚刚开始讨论集市,我发现结账功能对我的工作方式最有用 - 即我可以从"主副本"中进行c/o,进行一些开发然后将我的更改提交到新目录.然后,这将更新"主副本".
但是如果我正在研究(例如)两个项目,改变代码的不同部分呢?说:
~/master - master copy
bzr co master ./gui
bzr co master ./engine
Run Code Online (Sandbox Code Playgroud)
所以我在./gui目录中执行gui相关的东西,在./engine中使用底层内容.我应该如何兑现我的更改?如果我首先使用gui,然后是引擎,我想任何冲突都会在引擎中被标记出来?
有没有办法合并gui和引擎,然后只做一次提交到主副本?
为了使事情变得更复杂,如果我这样做怎么样:
bzr branch gui ./mouse
Run Code Online (Sandbox Code Playgroud)
现在我也许我一直在研究鼠标,但也在gui上.如果我想合并来自gui和鼠标的代码,然后提交到master,那么管理它的最佳方法是什么?或者,如果我也:
bzr branch gui ./keyboard
Run Code Online (Sandbox Code Playgroud)
如果我改变了gui,键盘和鼠标,我应该分层合并 - 即鼠标+键盘,然后将其与gui合并,然后将gui提交给master?
我希望很清楚我正在努力实现的目标!在此先感谢您的时间.
警告,这是一个纯粹的懒惰查询!随着我的项目的发展,一个类中的函数数量也在增加.我还有每个.py文件的一些类.所以我想做的是重新排序它们的功能名称是有组织的[对不起,英国在这里,我已经在Alphabetizing中以'z'进行了大量的妥协;-)]按字母顺序排列.
例如,目前:
class myClass():
stuff
def __init__():
do stuff
def b():
also do stuff
def c():
do other stuff
def a():
do even more stuff
Run Code Online (Sandbox Code Playgroud)
..为了便于查找,我想重新安排到:
class myClass():
stuff
def __init__():
do stuff
def a():
do even more stuff
def b():
also do stuff
def c():
do other stuff
Run Code Online (Sandbox Code Playgroud)
纯粹出于美观的原因,因为它使搜索相关功能更加直观.我显然希望将init()等保持在类的顶部.
现在,我可以(但还没有)使用python脚本执行此操作,该脚本将.py类作为文本文件驻留在.py中,并执行大量的字符串操作.但我想知道有更好的方法吗?也许有一个我可以在某处使用的工具?我有一次很好的打猎,但我找不到任何可以使用的东西.
我正在使用emacs,所以也许有一个很大的5分钟组合序列可以完成魔术(例如),但我在python模式下看不到任何东西!
最后,我想要一些方法来可视化和宣传类结构/文档字符串.
当我说可视化结构时,我的意思是,例如,myClass.a()调用myOtherClass.g(),这将是一个链接,所以我能够看到什么调用什么,或者在逐类class basis(即myClass使用什么函数/类?)或整体(这里是一堆文件,它们如何'连接'?)
这个(未答复的)问题有点类似:
我希望使用一个处理程序简单地附加任何东西(传递过滤器)到python列表.我会设想这样的代码:
import logging
import sys
mylog = logging.getLogger()
mylog.setLevel(logging.DEBUG)
log_list = []
lh = logging.SomeHandler(log_list)
lh.setLevel(logging.DEBUG)
mylog.addHandler(lh)
mylog.warning('argh')
print log_list[0]
Run Code Online (Sandbox Code Playgroud)
因此问题是 - 我该如何实现?我SomeHandler
可以用什么?
也许我让标题比问题更复杂,但这里是......!
我有一些在 xy 平面上连续的角度数据,跨越 360 => 0 度线 - 即 358,359,0,1,2...
如果我正在绘制这些并设置:
plt.xlim(0,360)
Run Code Online (Sandbox Code Playgroud)
当然,我会在图的最左边有三个点,在最右边有两个点。您可以在此处的(更复杂且实际的)图中看到这一点(故意颠倒了 x 轴限制):
我真正想要的是将所有点绘制在绘图窗口中相同位置的周围,也许朝向绘图的中心。在此方案下,x 轴向 360-0 度边界左侧减小,向右增大。
我不想对数据本身进行任何翻译/转换(这是一个大型数据集等),所以我希望通过一些 matplotlib 技巧来做到这一点。
我计划用 hexbin 绘制数据点,如果这有什么区别的话。
感谢您的浏览,并预先感谢您的帮助,
戴夫
第一篇文章,所以玩得好!
我有一个关于Python词典的相当基本的问题.我希望有一些dict值在另一个变量被更改时更新(或者至少在下次调用时重新计算) - 例如:
mass = 1.0
volume = 0.5
mydict = {'mass':mass,'volume':volume}
mydict['density'] = mydict['mass']/mydict['volume']
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,mydict ['density']只返回2.0.如果我改变mydict ['mass'] = 2.0,密度将不会更新.很好 - 我可以理解为什么 - 密度是由传递给声明时的值定义的.所以我想也许我可以用lambda表达式来解决这个问题,例如(为可怕的代码道歉!):
mydict['density_calc'] = lambda x,y: x/y
mydict['density'] = mydict['density_calc'](mydict['mass'],mydict['volume'])
Run Code Online (Sandbox Code Playgroud)
但同样,这只会返回原始密度,尽管改变了mydict ['mass'].作为最后的尝试,我尝试了这个:
def density(mass,volume): return mass/volume
mydict['density_calc'] = lambda x,y: density(x,y)
mydict['density'] = mydict['density_calc'](mydict['mass'],mydict['volume'])
Run Code Online (Sandbox Code Playgroud)
再一次,没有骰子.这似乎是一个非常简单的问题需要解决,所以提前道歉,但如果有人能帮助我,我会非常感激!
干杯,
戴夫
python ×9
matplotlib ×5
plot ×3
alphabetized ×1
arrays ×1
axes ×1
bazaar ×1
bibliography ×1
bibtex ×1
checkout ×1
class ×1
dictionary ×1
latex ×1
logging ×1
merge ×1
numpy ×1
publishing ×1
variables ×1