我正在用matplotlib绘制条形图.我需要144个竖条.
如果我使用多达140个小节,一切都按预期工作,但是一旦它达到141或更多,我会在最后一个小节的右边看到一个奇怪的空白:
IDs = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', …Run Code Online (Sandbox Code Playgroud) 有没有办法在matplotlib表中指定各列的宽度?
我表中的第一列只包含2-3位数字ID,我希望此列比其他列小,但我似乎无法让它工作.
假设我有一个这样的表格:
import matplotlib.pyplot as plt
fig = plt.figure()
table_ax = fig.add_subplot(1,1,1)
table_content = [["1", "Daisy", "ill"],
["2", "Topsy", "healthy"]]
table_header = ('ID', 'Name','Status')
the_table = table_ax.table(cellText=table_content, loc='center', colLabels=table_header, cellLoc='left')
fig.show()
Run Code Online (Sandbox Code Playgroud)
(别介意奇怪的裁剪,它不会发生在我真正的桌子上.)
我试过的是这个:
prop = the_table.properties()
cells = prop['child_artists']
for cell in cells:
text = cell.get_text()
if text == "ID":
cell.set_width(0.1)
else:
try:
int(text)
cell.set_width(0.1)
except TypeError:
pass
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎没有效果 - 列仍然都是相同的宽.(cell.get_width()返回0.3333333333,所以我认为这width确实是单元格宽度......所以我做错了什么?
任何帮助,将不胜感激!
我正在使用 matplotlib 生成直方图。
我需要垃圾箱的宽度不等,因为我最感兴趣的是最低的垃圾箱。现在我正在这样做:
plt.hist(hits_array, bins = (range(0,50,10) + range(50,550,50)))
Run Code Online (Sandbox Code Playgroud)
这创建了我想要的(前 5 个 bin 的宽度为 10,其余为 50),但是前 5 个 bin 显然比后面的窄,因为所有 bin 都显示在同一轴上。
有没有办法影响 x 轴或直方图本身,以便我可以在前 5 个 bin 之后打破比例,以便所有 bin 显示为同等宽度?
(我意识到这会产生扭曲的视图,我对此很满意,尽管我不介意轴的两个不同比例的部分之间有一点空间。)
任何帮助将不胜感激。谢谢!
我有一个带对数x轴和y轴的散点图(因为我主要对两者的较低值感兴趣).
但是,我希望刻度标签是十进制格式,而不是10 ^ x.
我正在使用这个:
# axis limits:
ax.set_xlim(xmin=0, xmax = 1.2)
ax.set_ylim(ymin=0,ymax=1000)
# log scales:
ax.set_yscale('log')
ax.set_xscale('log')
# set y-ticks:
ax.set_yticks((1,10,100,1000))
ax.set_yticklabels(("1","10","100","1000"))
Run Code Online (Sandbox Code Playgroud)
这有效(虽然引入ax.set_yscale('log')或ax.set_xscale('log')提出以下警告(任何想法是什么?):
Warning (from warnings module):
File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 3785
warnings.warn("Warning: converting a masked element to nan.")
UserWarning: Warning: converting a masked element to nan.
Run Code Online (Sandbox Code Playgroud)
但是当我为x轴尝试相同的时候,我得到一个MaskError:
# set x-ticks:
ax.set_xticks((0, 0.2, 0.4, 0.8, 1))
ax.set_xticklabels(("0", "0.2", "0.4", "0.8", "1"))
[snip long long traceback]
File "C:\Python27\lib\site-packages\numpy\ma\core.py", line 3795, in __int__
raise MaskError, 'Cannot convert masked …Run Code Online (Sandbox Code Playgroud) 我在matplotlib中生成堆积条形图(在Windows 7上使用Python 2.7).
由于我想用它来成对地比较来自2个数据集的数据,我想为每个第2个条使用不同的颜色.谁能告诉我如何实现这一目标?
我的条形图看起来基本上是这样的:
import numpy
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
IDs = ["1","A","2","B","3","C","4","D","5","E"]
N = len(IDs)
property1 = numpy.array([1,3,4,2,3,5,6,7,3,2])
property2 = numpy.array(range(10))
property3 = numpy.array(range(10,0,-1))
ind = numpy.arange(N)
width = 0.8
p1 = ax1.bar(ind, property1, width, color='red')
p2 = ax1.bar(ind, property2, width, color='blue', bottom=property1)
p3 = ax1.bar(ind, property3, width, color='green', bottom=property1 + property2)
plt.xticks(ind+width/2., IDs )
plt.show()
plt.close()
Run Code Online (Sandbox Code Playgroud)
因此,我想对标有字母的条形图使用一种颜色方案,对于标有数字的条形图使用另一种颜色方案(因为例如,"1"和"A"形成一对 - 它们代表在2种不同实验条件下的相同样品,这就是为什么我希望他们彼此相邻).
理想情况下,如果宽度可以调整为在一对条之间没有间隙(但是对之间的间隙),那将是非常好的.
但是现在,我不知道如何解决这个问题,所以任何建议都会很棒!
(我可以单独使用两组"数据",这样更容易吗?也许可以做两个间隙较大的图,相互交叉?)
这可能是非常基本和简单的事情,我可能只是在谷歌搜索错误的条款,但希望有人在这里可以帮助我.(我仍然是编程的初学者,从这个问题可能很明显.)
我正在寻找一种从字符串中访问变量的方法.
像这样:
A1 = {}
B1 = {}
C1 = {}
mylist = ["A","B","C"]
for blurb in mylist:
blurb1.foo()
Run Code Online (Sandbox Code Playgroud)
现在我在这种情况下使用if/elif-constructions:
if blurb == "A":
A1.foo()
elif blurb == "B":
B1.foo()
elif blurb == "C":
C1.foo()
Run Code Online (Sandbox Code Playgroud)
这有效,但肯定有更优雅的方式吗?
谢谢你的帮助!Lastalda
编辑2:试图再次澄清(抱歉之前没有非常连贯,我很难理解这一点):
我想从字符串创建和访问对象.
因此,如果我有一个返回字符串的函数,我想创建一个使用此字符串作为列表名称的列表,然后使用该列表执行操作.
x = foo() # foo returns a string, e.g. "A"
# create list named whatever the value of x is
# in this case:
A = []
Run Code Online (Sandbox Code Playgroud)
难道没有什么比为x的所有可能结果准备列表以及使用长elif结构或词典更优雅吗?在这种情况下我是否必须使用eval()?(我对使用eval()犹豫不决,因为它被认为是危险的.)
我希望现在终于清楚了.任何帮助仍然赞赏!
我正在尝试处理我的python程序中的文件地址并将其传递给MySQL.
我发现我需要使用原始字符串作为地址,以便它完整地到达MySQL.这有效:
myFilePath = r"'D:\\folder\\file.csv'"
sqlStatement = r"LOAD data local INFILE %s INTO TABLE test ...);" % (myFilePath)
Run Code Online (Sandbox Code Playgroud)
但是,我正在创建一个GUI,并希望路径名是可更改的.所以我试图将正常的文件路径转换为正确的格式,但我无法完成它.
我该如何转换?
filePath = "D:\folder\file.csv"
Run Code Online (Sandbox Code Playgroud)
进入与上面的myFilePath完全相同的格式?
到目前为止,我提出的最好的是
myFilePath = r'r"' + "'" + filePath + "'"
Run Code Online (Sandbox Code Playgroud)
但我仍然需要加倍现有的反斜杠,我找不到任何办法.我试过迭代,像这样:
myFilePath = ""
for i in range(len(filePath)):
if i == "\\":
myFilePath += "\\\\"
else:
myFilePath += filePath[i]
Run Code Online (Sandbox Code Playgroud)
但这不起作用,可能是因为反斜杠的逃逸性质.再次使用原始字符串会产生比我想要的更多的反斜杠,而且我已经超出了我的深度.
有人可以帮帮我吗?
我找不到关于 PyQt5 中 QMainWindow 与 QWidget 的不同用法的很好的解释(我猜是 Qt)。从我读过的内容来看,QMainWindow 继承自 QWidget,所以应该能够做 QWidget 所能做的一切,甚至更多。但是,当我尝试将我从 QWidget 找到的示例转换为 QMainWindow 时,布局被搞砸了。
我正在尝试解决的示例来自https://www.tutorialspoint.com/pyqt/pyqt_qstackedwidget.htm。(我的 GUI 将有一个 StackedWidget 作为中央小部件,带有一个用于导航的侧面板,因此让这个示例在 QMainWidget 中工作将是我自己代码的一个很好的基础。)
PyQT5 转换和稍微缩短的版本:
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import (QApplication, QFormLayout, QLabel, QRadioButton, QCheckBox,
QListWidget, QStackedWidget, QLineEdit,
QHBoxLayout, QGridLayout
)
from PyQt5.Qt import QWidget, QMainWindow
class StackedExample(QMainWindow):
def __init__(self):
super(stackedExample, self).__init__()
self.leftlist = QListWidget ()
self.leftlist.insertItem (0, 'Contact' )
self.leftlist.insertItem (1, 'Personal' )
self.stack1 = QWidget()
self.stack2 = QWidget()
self.stack1UI()
self.stack2UI()
self.Stack = QStackedWidget (self) …Run Code Online (Sandbox Code Playgroud)