从数据库中提取的10k记录的散点图

时间:2012-01-04 18:31:23

标签: python mysql matplotlib scatter-plot

我正在尝试用Python制作散点图。我认为它会相当简单,但在绘图时会在散点图(x和y值)中理解。

== 我的使命 ==

  • 我有数据库和超过10k的记录(全部浮动)到现在为止,并且每天都会增加。
  • 记录范围为200-2000(十进制浮点数)。
  • 所以,我希望在我的数据集中看到人口最多的区域。

== 我做了什么? ==

import numpy as np
import pylab as pl
import MySQLdb
import sys
import math

conn = MySQLdb.connect(
    host="localhost",
    user="root",
    passwd="root",
    db="myproject")

with conn:
    cur = conn.cursor()

    #will fetch all recoreds called monoiso field
    cur.execute("SELECT monoiso FROM pmass_selectedion")
    rows = cur.fetchall()

    for row in rows:

        #xvalue for monoiso variable and yvalue for range 
        xvalue = row
        yvalue = [600]

        # tried this way too but got x and y dimension error
        #yvalue = [400,800,1200,1600]

        pl.plot(xvalue,yvalue,'ro')
pl.show()

散点图了解link

enter image description here

确定!这个情节没有任何意义。

== 问题 ==

  • 如何制作散点图以查看人口最多的地区?
  • 如何指定y变量以使x变量具有相同的维度(获取的记录总数)?

新绘图和统计所以请帮帮我

2 个答案:

答案 0 :(得分:3)

也许您正在寻找a matplotlib histogram

import numpy as np
import MySQLdb
import matplotlib.pyplot as plt # This is meant for scripts
# import pylab as pl # This is meant for interactive sessions; 
import operator

conn = MySQLdb.connect(
    host="localhost",
    user="root",
    passwd="root",
    db="myproject")

with conn:
    cur = conn.cursor()

    #will fetch all recoreds called monoiso field
    cur.execute("SELECT monoiso FROM pmass_selectedion")
    rows = cur.fetchall()

monoisos = [row[0] for row in rows]

# Make a histogram of `monoisos` with 50 bins.
n, bins, histpatches = plt.hist(monoisos, 50, facecolor = 'green')
plt.show()

enter image description here


您还可以使用numpy.histogram

制作直方图/点图
momoisos = [row[0] for row in rows]
hist, bin_edges = np.histogram(monoisos, bins = 50)
mid = (bin_edges[1:] + bin_edges[:-1])/2
plt.plot(mid, hist, 'o')
plt.show()

enter image description here


关于pylab的使用:pyplot的docstring说

  

matplotlib.pylab将pyplot与numpy结合到一个命名空间中。   这对于交互式工作很方便,但对于编程来说却是如此   建议将名称空间分开。

答案 1 :(得分:2)

对于散点图,您需要相同数量的x和y值。通常在散点图中,其中一个变量是另一个变量的函数,或者至少两者都具有数值。例如,你可以有x值[1,2,3]和y值[4,5,6],那么在二维图上,(1,4)的(x,y)值,(2) ,5)和(3,6)将被绘制。

在你的情况下,在我看来,没有y值,只有x值,你保持y固定。从我看来,我们无法生成这样的散点图。我们需要一个对应于每个x值的y值。您可以尝试将序列号作为y,但在图中可能没有多大意义。