小编Cod*_*Cat的帖子

matplotlib条形图中的奇怪空白,具有> 140个值

我正在用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

4
推荐指数
1
解决办法
247
查看次数

Matplotlib表:单个列宽

有没有办法在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

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

在 Matplotlib 直方图中定义 bin 宽度/x 轴比例

我正在使用 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 显示为同等宽度?

(我意识到这会产生扭曲的视图,我对此很满意,尽管我不介意轴的两个不同比例的部分之间有一点空间。)

任何帮助将不胜感激。谢谢!

axis matplotlib

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

Matplotlib中对数轴上的小刻度

我有一个带对数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

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

堆叠的matplotlib栏中的替代颜色

我在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种不同实验条件下的相同样品,这就是为什么我希望他们彼此相邻).

理想情况下,如果宽度可以调整为在一对条之间没有间隙(但是对之间的间隙),那将是非常好的.

但是现在,我不知道如何解决这个问题,所以任何建议都会很棒!

(我可以单独使用两组"数据",这样更容易吗?也许可以做两个间隙较大的图,相互交叉?)

python matplotlib

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

Python:从字符串访问变量

这可能是非常基本和简单的事情,我可能只是在谷歌搜索错误的条款,但希望有人在这里可以帮助我.(我仍然是编程的初学者,从这个问题可能很明显.)

我正在寻找一种从字符串中访问变量的方法.

像这样:

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

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

Python:双反斜杠格式

我正在尝试处理我的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)

但这不起作用,可能是因为反斜杠的逃逸性质.再次使用原始字符串会产生比我想要的更多的反斜杠,而且我已经超出了我的深度.

有人可以帮帮我吗?

python backslash

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

QMainWindow 与 QWidget

我找不到关于 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)

pyqt python-3.x qmainwindow pyqt5

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

标签 统计

matplotlib ×5

python ×3

axis ×1

backslash ×1

pyqt ×1

pyqt5 ×1

python-3.x ×1

qmainwindow ×1