- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有多个系列的数据。
示例图:
我的问题是 X 轴包含“一年中的第几天”值,但我必须在此处放置月份名称。不幸的是,使用简单的 DateAxis 不是一种选择,因为 X 值是天数(不是日期),而且据我所知,没有可以将“335”转换为“December”的日期格式。 DateAxis 的另一个问题是它表示时间点,它为任何时间点提供单独的 X 轴标签。但我需要为确切的时间点写下标签。即:仅在月初。我真正想要的是这样的:
例如我不想在月初/月末放置“刻度”,而是想显示区域。更难的是月份的长度不同。由于 2 月在闰年有 29 天,我想我将不得不使用定点(一年中的某一天值)。
我是否必须为此编写自定义轴渲染器?如何?我的问题有更简单的解决方案吗?
最佳答案
import java.awt.Graphics2D;
import java.awt.font.LineMetrics;
import java.awt.geom.Rectangle2D;
import java.util.List;
import java.awt.Color;
import org.jfree.chart.axis.AxisState;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueTick;
import org.jfree.text.TextUtilities;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.TextAnchor;
public class DayOfYearAxis extends NumberAxis {
/* Day of the year values for month end days. */
public static final Integer[] MONTH_LENGTHS = {
31,29,31,30,31,30,31,31,30,31,30,31
};
public static final String[] MONTH_NAMES = {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
};
protected AxisState drawTickMarksAndLabels(Graphics2D g2,double cursor,Rectangle2D plotArea,Rectangle2D dataArea,RectangleEdge edge) {
AxisState state = new AxisState(cursor);
g2.setFont(getTickLabelFont());
double ol = getTickMarkOutsideLength();
double il = getTickMarkInsideLength();
int y = (int)(Math.round(cursor-ol));
LineMetrics lineMetrics = g2.getFont().getLineMetrics("Ápr", g2.getFontRenderContext());
int h = (int) (lineMetrics.getHeight() + 6);
List<ValueTick> ticks = refreshTicks(g2, state, dataArea, edge);
state.setTicks(ticks);
/* Last x point */
ValueTick tick = ticks.get(ticks.size()-1);
float[] prevAnchorPoint = calculateAnchorPoint(tick, cursor,dataArea, edge);
double xmax = prevAnchorPoint[0];
double max_day = tick.getValue();
/* First x point */
tick = ticks.get(0);
prevAnchorPoint = calculateAnchorPoint(tick, cursor,dataArea, edge);
double xmin = Math.round(prevAnchorPoint[0]);
double min_day = tick.getValue();
double days_visible = max_day - min_day + 1;
/* 0.1 day horizontal gap. */
double gap = 0.1*(xmax-xmin)/days_visible;
System.out.println("min_day "+min_day+" max_day"+max_day);
g2.setFont(getTickLabelFont());
g2.setColor(Color.BLACK);
int start_day = 0;
for (int month=0;month<12;month++) {
int end_day = start_day + MONTH_LENGTHS[month] - 1;
System.out.println("start-end "+start_day+" "+end_day);
if ( (start_day>=min_day) && (start_day<=max_day) && (end_day>=min_day) && (end_day<=max_day) ) {
double factor_x1 = (start_day - min_day) / days_visible;
double x1 = xmin + (xmax-xmin)* factor_x1;
double factor_x2 = (end_day - min_day) / days_visible;
double x2 = xmin + (xmax-xmin)* factor_x2;
System.out.println("month="+month+", start_day="+start_day+" end_day="+end_day+" x1="+x1+" x2="+x2);
g2.setColor(Color.LIGHT_GRAY);
g2.fill3DRect((int)(x1+gap),y,(int)(x2-x1-2*gap),h,true);
g2.setColor(Color.BLACK);
TextUtilities.drawAlignedString(MONTH_NAMES[month], g2, (float)((x1+x2)/2), (float)(y+ol), TextAnchor.TOP_CENTER);
}
start_day += MONTH_LENGTHS[month];
}
return state;
}
}
用法:
JFreeChart chart = ChartFactory.createXYLineChart(...);
DayOfYearAxis doyAxis = new DayOfYearAxis();
/* optional
doyAxis.setAutoRange(false);
doyAxis.setRange(new Range(min_yday, max_yday));
*/
chart.getXYPlot().setDomainAxis(doyAxis);
示例输出(带有匈牙利月份名称):
关于java - JFreeChart 自定义 x 轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406454/
所以我使用一个带有整个 block 的标签作为链接,它是一个产品展示,所以你点击它会转到产品页面。现在我创建了一个标签作为链接到购物车页面的按钮。所以我让它工作,但是当我点击购物车按钮时,两个页面都会
根据 Web 标准,创建带有标题 1 的链接的正确代码是什么? 是吗 stackoverflow 或 stackoverflow 谢谢 最佳答案 根据网络标准,您不能将 block 元素放入内
在Java中它是这样写的..当我移植这段代码时...意识到没有这样的东西 break 和continue . 我知道这些命令没有包含在内,因为在使用带有命令的 goto 时必须有一种更简洁的方法来执
我们有一个相当标准的发布过程,使用 Visual Source Safe 在发布之前标记构建。这允许我们在出现任何问题时从该标签中获取,并在需要更改时使用它进行分支。 我们有几个不同的项目,并且总是使
我必须创建一个搜索内容,其中包含搜索框、标题和段落描述。默认情况下,描述被禁用,当我输入一些与描述文本匹配的文本时,描述段落标签应该打开。一些匹配的演示是这样的: [ fiddle ][1] 但默认情
我一直在阅读有关 的文档标签,我似乎无法理解它与简单地使用 有何不同那是 display: none; 文档:template tag 例子 对比 例子
我需要一个脚本来复制当开关按钮打开时标记,当开关按钮关闭时删除标记。我需要一个简单的方法。这是开关按钮: 我试过这个: var change
JSF 是一个 MVC 框架,但我很困惑为什么我们已经有了这么多 HTML 标签还需要 JSF 标签。毫无疑问,JSF 简化了很多事情。我想进一步了解 JSF 中的模型 View 和 Controll
我在这个 website 上看到了那些 html 代码: Homepa
我添加了 photoswipe 插件,可以使用 搜索我的所有照片。标签,如果点击,照片就会变成全屏。我让它工作了,但现在我的导航栏(有 标签)在点击时会触发 photoswipe 插件。 在 ph
标签
我正在尝试截断显示自 的文本标签,但它不工作。我将样式应用于其他标签样式并且它确实有效(我看到的示例中没有一个使用 标签)。我想知道是否有人可以向我解释为什么会这样(我不是最擅长 HTML/CSS
HTML 是这样的: Menu 1 Menu 2 Sub menu 2
我可以更改 TextInputLayout 的位置 float 标签(底部 float 标签)吗?我需要为波纹管 float 标签设置正确的位置。 最佳答案 我解决了我的问题,这是我的 xml:
我的代码是 printMsg : function(data) { $("#message").html(data.bodyText); ... } 这里 data.body
我是 Scrapy 和 Xpath 的初学者,我正在寻找解析具有以下结构的网站 cat1 value1 value2
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我必须从 xml 中解析数据。这是我的 xml- 或者它的 url 是:http://mobileecommerce.site247365.com/admin/catdata.xml News f
如何创建应该允许多行数据的标记。不要说使用textarea标签。我知道,但我只想 标记因为标签具有 value 属性。所以当我从 xml 文件获取值时,我应该使用 jquery 语法动态获取.. 最佳
我有一个页面使用我定义的某些样式。 在同一页面上,我刚刚导入了一个使用自己样式的外部 jQuery 插件,例如,包括 。被我自己覆盖的标签样式。 如何确保我的样式表中的样式不会覆盖 jQuery 插件
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我是一名优秀的程序员,十分优秀!