c++ 绘制两个柱状图,图1为十个人的身高数据,图2为另外十个人的身高数据,身高大于180的柱体为红色,低于160的柱体为绿色,其余柱体为蓝色,两个柱状图上下排列
时间: 2024-09-26 20:13:47 浏览: 6
在C++中绘制柱状图通常会涉及到图形库,如SFML、Qt或者Windows GDI+等。这里我会提供一个基于SFML的基本示例,因为SFML对于初学者来说较为友好。请注意,这个例子假设你已经安装并熟悉了SFML库。
```cpp
#include <SFML/Graphics.hpp>
// 假设我们有两个数组存储身高数据
std::vector<int> heights1 = {175, 190, 180, 165, 178, 170, 185, 168, 182, 173};
std::vector<int> heights2 = {188, 175, 170, 155, 180, 165, 190, 162, 184, 177};
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "Height Bar Charts");
sf::Font font;
if (!font.loadFromFile("arial.ttf")) // 加载字体文件
return -1;
for (size_t i = 0; i < heights1.size(); ++i) {
float barWidth = 40; // 柱状图宽度
float y = 500 - heights1[i]; // 根据身高计算Y坐标
sf::RectangleShape bar(sf::Vector2f(barWidth, y));
bar.setFillColor(i % 2 == 0 ? sf::Color::Green : (heights1[i] > 180 ? sf::Color::Red : sf::Color::Blue)); // 设置颜色
bar.setPosition(i * (barWidth + 10), 500); // X位置计算
window.draw(bar);
// 添加文本标签
sf::Text label(std::to_string(heights1[i]), font, 14);
label.setPosition(i * (barWidth + 10) + barWidth / 2, 530);
label.setColor(sf::Color::White);
window.draw(label);
}
// 图2同理,只需要替换heights1和对应的标签文本
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
// 绘制图2...
window.display();
}
return 0;
}
```
在这个示例中,我们首先创建一个窗口和加载一个字体。然后,遍历身高数据,为每个柱子设置颜色和位置,并添加相应的文本标签。最后,不断更新窗口直到用户关闭它。
注意:你需要将"arial.ttf"替换为你系统上实际存在的字体文件路径,同时这个代码片段只是一个基本框架,为了适应真实项目,你可能需要调整细节,例如添加错误处理,用户交互等。如果你还没有安装SFML,可以从其官网下载并设置环境变量。