select_sqli ="SELECT time,SUM(CASE WHEN type_c='两厢车' THEN xiaoliang ELSE 0 END)/SUM(xiaoliang) AS ratio,1 - SUM(CASE WHEN type_c='两厢车' THEN xiaoliang ELSE 0 END)/SUM(xiaoliang) AS ratio_complement FROM sheji.sale GROUP BY time;" cur.execute(select_sqli) data = pd.DataFrame(cur.fetchall(), columns=['time', 'portion','r_portion']) data.set_index('time') data = data.sort_index() data = data.iloc[:5, :] plt.figure(figsize=(9.42,1)) data.plot(kind='bar', stacked=True) # 设置标题和标签 plt.title('Sales Ratio of Different Categories') plt.xlabel('Category') plt.ylabel('Ratio') plt.xticks(rotation=90) # 显示图形 plt.savefig('portion.png',dpi=300) pix = QPixmap("portion.png") new_width = self.Market.label_4.width() new_height = int(pix.height() * new_width / pix.width()) scaled_pixmap = pix.scaled(QSize(new_width, new_height), Qt.AspectRatioMode.KeepAspectRatio,Qt.TransformationMode.SmoothTransformation) self.Market.label_4.setPixmap(scaled_pixmap) plt.close()为什么横轴变成0,1,2,3,4了,应该为日期
时间: 2024-02-14 11:07:03 浏览: 68
根据你提供的代码,应该是因为没有正确设置横轴的标签。可以尝试在`data.plot()`函数中添加参数 `x='time'` 来指定横轴,例如 `data.plot(kind='bar', stacked=True, x='time')`。另外,你也可以尝试在绘制图形之前添加一行代码 `data = data.set_index('time')` 来将时间列设为索引,然后再进行绘图。这样应该就能正确显示横轴的日期了。
相关问题
select_sqli = "SELECT distinct chexing FROM sheji.sale where type_c='"+string+"' and time='"+year_month+"' order by rank_m ;"
根据你提供的 SQL 语句,错误信息提示在 ORDER BY 子句中引用了不在 SELECT 列表中的列 'sheji.sale.rank_m'。这可能是因为在 SELECT 列表中并没有包含 'rank_m' 这一列。你可以尝试修改 SQL 语句,将 'rank_m' 列添加到 SELECT 列表中,如下所示:
```
SELECT DISTINCT chexing, rank_m
FROM sheji.sale
WHERE type_c = '"+string+"' AND time = '"+year_month+"'
ORDER BY rank_m;
```
这样就可以在 ORDER BY 子句中引用 'rank_m' 列了。如果你想去除 'rank_m' 列的重复值,可以使用 GROUP BY 子句,如下所示:
```
SELECT chexing, rank_m
FROM sheji.sale
WHERE type_c = '"+string+"' AND time = '"+year_month+"'
GROUP BY chexing, rank_m
ORDER BY rank_m;
```
注意:在使用 SQL 语句时,应该尽量避免使用字符串拼接的方式来构建 SQL 语句,因为这样容易引入 SQL 注入漏洞。建议使用参数化查询的方式来构建 SQL 语句,这样可以有效避免 SQL 注入漏洞。
try: select_sqli = "SELECT distinct time FROM sheji.sale;" cur.execute(select_sqli) data = pd.DataFrame(cur.fetchall(), columns=['time']) except Exception as e: print("读取数据失败:", e) else: print("读取数据成功") data['time'] = pd.to_datetime(data['time'], format='%Y-%m') data = data.sort_index() year_month = time.strftime('%Y-%m', time.localtime(data['time'][0])) print(year_month)哪里有错
这段代码中可能存在以下几个问题:
1. 代码中缺少数据库连接的相关操作,包括导入相关库、建立连接、创建游标等操作。需要确保已经完成了这些操作才能执行 SQL 查询语句。
2. `pd.DataFrame(cur.fetchall(), columns=['time'])` 中的 `cur.fetchall()` 可能会返回空结果,如果为空,则不能用空值来创建 DataFrame。需要加上判断语句,如:
```python
if cur.rowcount > 0:
data = pd.DataFrame(cur.fetchall(), columns=['time'])
else:
print("查询结果为空")
```
3. `data['time'][0]` 可能会出现 `IndexError` 的错误,因为 DataFrame 可能为空。需要先判断 DataFrame 是否为空,如:
```python
if not data.empty:
year_month = time.strftime('%Y-%m', time.localtime(data['time'][0]))
else:
print("DataFrame为空")
```
希望这些提示能够帮助你解决问题。
阅读全文