【问题标题】:How to use the variable from the python in rpy2?如何在rpy2中使用python中的变量?
【发布时间】:2012-08-12 11:40:39
【问题描述】:

我的简单程序从 Python 中提取数据库并存储在变量 row 中。

cursor = con.cursor()       
    cursor.execute("SELECT * FROM traffic")

    #Retrieves data from SQL
    rows = cursor.fetchall()  

    for row in rows:
       row = list(row)
       a = row[1:]
       b = row[:-1]
       print(a)
       print(b)

现在我可以获得列表 a 和 b 中的月份和流量,例如 [1000L]

['January']
[100L]
['February']
[10430L]
['March']
[1500L]
['April']
[100L]
['May']
[1200L]
['June']
[800L]
['July']
[8000L]
['August']
[100000L]
['September']

现在我想从中绘制直方图和饼图。 该行包含两个列:MOnthTraffic。我想使用 Rpy2 将其转换为图表。我该怎么做?这是我的桌子:

month     | traffic |
+-----------+---------+
| January   |    1000 |
| February  |     100 |
| March     |   10430 |
| April     |    1500 |
| May       |     100 |
| June      |    1200 |
| July      |     800 |
| August    |    8000 |
| September |  100000 |
+-----------+---------+

【问题讨论】:

  • 什么是“图表”(tam ta daaaam)?听起来很吓人。
  • 我查看了一些教程,发现:从 Python-space variables 试过了,没用!简单地说,我试过 r.x11() r('plot(row)')
  • 如果您只想做绘图,您可以在 Python 中完成所有操作(使用 matplotlib)。
  • 不,我想做复杂的事情。我正处于学习阶段,因此决定先做一些小事。
  • 月份和流量是两个列名。首先,我按行提取数据!我想将该行变量转换为 R 变量并转换为图表。试过 r('plot(row)'),没用!

标签: python r rpy2


【解决方案1】:

首先,从您的数据库中创建两个列表。比如:

cursor = con.cursor()       
cursor.execute("SELECT * FROM traffic")

#Retrieves data from SQL
rows = cursor.fetchall()  

Month = list()
Traffic = list()

for row in rows:
    Month.append(row['Month'])          # guesswork - what does a row look like?
    Traffic.append(row['Traffic'])

那么,现在你有两个 python 列表,你可以这样绘制:

>>> r.plot(Month,Traffic)
rpy2.rinterface.NULL

你可能想要线条:

>>> r.plot(Month,Traffic,type="l")
rpy2.rinterface.NULL

您可能想要漂亮的标签:

>>> r.plot(Month,Traffic,type="l",xlab="Month",ylab="Traffic")

【讨论】:

  • 它是静态的。我知道该怎么做。我被困在动态的一个。使用 Python 从数据库中提取数据并打印这些提取数据的图表。
  • 嗯?所以真正的问题是“如何将数据库的列读入 python 列表?”然后问那个。
  • 不,你想绘制它们。要绘制它们,您必须从从数据库中迭代获取的行对象中创建 python 列表。尽管我们可以读取您的代码,但如果没有像您这样的数据库,我们将无法运行它。
  • 我收到此错误:TypeError:元组索引必须是整数,而不是 str。我认为列表方法没有将元组(默认)转换为列表。我尝试这样做: for row in rows: row = list(row) a = row[1:] b = row[:-1] print(a) print(b) 有效但 r.plot(a, b) 没有不工作
猜你喜欢
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 2020-03-07
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多