c++ 绘制柱状图,包含十个人的身高数据,身高大于170cm的柱状图颜色为红色,身高低于160cm的柱状图颜色为绿色,其余为蓝色,柱状图上方显示数据值,绘制另外十个人的身高柱状图,放在上一个柱状图下方
时间: 2024-09-24 19:20:39 浏览: 43
在C++中,我们可以使用一些图形库如SFML或Qt来绘制柱状图,这里我会给出一个简单示例,说明如何使用SFML库实现这种需求。由于实际代码较长,我会提供关键部分的伪代码和步骤:
首先,你需要安装SFML库并设置好环境。然后,可以编写一个类,比如`BarChart`,来管理两个系列的数据和颜色:
```cpp
#include <SFML/Graphics.hpp>
class BarChart {
public:
// 添加系列数据和颜色
void addSeries(const std::vector<double>& heights, sf::Color color) {
series.push_back({heights, color});
}
// 绘制函数
void draw(sf::RenderWindow& window, int x, int y) const {
for (const auto& [heights, color] : series) {
for (double height : heights) {
if (height > 170) {
sf::RectangleShape bar(10, height * 5); // 假设每个柱子高度为5像素单位
bar.setPosition(x, y);
bar.setFillColor(color == sf::Color::Red ? sf::Color::Red : sf::Color::Blue);
window.draw(bar);
} else if (height < 160) {
bar.setFillColor(color == sf::Color::Green ? sf::Color::Green : sf::Color::Blue);
}
x += 20; // 柱子间的间隔
}
y -= 50; // 下移以显示新的系列
}
}
private:
std::vector<std::pair<std::vector<double>, sf::Color>> series;
};
```
然后你可以创建两个`BarChart`实例,分别对应两组数据,并在窗口循环更新它们:
```cpp
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "Height Chart");
// 创建两个柱状图实例
BarChart chart1{{165, 175, 180, ..., 190}, sf::Color::Blue}; // 数据和初始颜色
BarChart chart2{{170, 173, 185, ..., 195}, sf::Color::Red}; // 高于170cm用红,低于160cm用绿
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
// 处理事件...
}
window.clear();
chart1.draw(window, 50, window.getSize().y / 2);
chart2.draw(window, 50, 0);
window.display();
}
return 0;
}
```
阅读全文