OHLC: first and last candles are clipped at the plot edges
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 68/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- java
- Lĩnh vực
- data-visualization
Hướng nghiên cứu
Bắt đầu trong PlotContent_OHLC.doPaint, đặc biệt là phần tính toán xTransform và xử lý độ rộng của nến. Tái hiện vấn đề với một biểu đồ chứa bốn nến rộng và kiểm tra độ bao phủ kiểm thử liên quan từ PR #991. Được xem là hoàn tất khi nến đầu tiên và nến cuối cùng được kết xuất đầy đủ bên trong vùng vẽ mà không làm hồi quy hành vi OHLC hiện có.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description
In an OHLC candlestick chart, the x-axis range is set to exactly [dataMin, dataMax]. As a result, the first and last candles are centered on the plot's left/right boundaries, so roughly half of each edge candle body extends past the plot content area and is clipped.
Reproduction
A chart with few, wide candles makes this obvious (e.g. 4 candles) — the leftmost and rightmost candle bodies are visibly cut in half by the plot border. See screenshot discussion in #734 / PR #991.
Root cause
- The first data point (
x = xMin) maps to the left edge of the tick space and the last (x = xMax) to the right edge —PlotContent_OHLC.doPaint(xTransform = xLeftMargin + ((x - xMin) / (xMax - xMin) * xTickSpace)). - Each candle is drawn centered on that point, extending
±candleHalfWidth. - The only slack is the plot-content margin (
getPlotContentSize()default0.92→ ~4% of width per side). The candle half-width isxTickSpace / xData.length / 2, which for a small number of candles greatly exceeds that margin, so the edge candles overrun the boundary.
With realistic OHLC data (many narrow candles) the overrun is a thin sliver and largely unnoticeable, which is likely why it hasn't been reported before.
Suggested fix
Pad the x-axis range (or the mapped plot area) by ~half a candle width on each side, as most candlestick charting libraries do, so the first and last candles render fully inside the plot. This should be independent of the candle count.
Notes
Discovered while adding test coverage in PR #991 (issue #734, doji candles). This clipping is a pre-existing, general OHLC rendering behavior, unrelated to the doji fix.
- Ngôn ngữ chính
- Java
- Star
- 1.6k
- Fork
- 400
- Merge trung bình
- 3 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 5
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của knowm/XChart
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
-
`CategoryChart.addSeries` could support additional call signature for interoperability with ScalaĐang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
-
AnnotationsĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 35/100
-
Aesthetics Feature Request
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
-
Feature Request
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
Issue tương tự
-
BindingServiceProperties.bindings regressed to a non-thread-safe TreeMap in GH-3158: concurrent first use of binding names corrupts itCó thể đã có người làm @AkashB23 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
spring-cloud/spring-cloud-stream#3321 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[Bug] 资源包列表 与 模组/数据包/世界 列表排列顺序不一致Có thể đã có người làm @fishdry1000 đã nhận 4 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
ai-driven-fuzzing bug claude Minor
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
linagora/twake-calendar-side-service#1333 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
AtlasOfLivingAustralia/species-lists#882 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Type/Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
ballerina-platform/ballerina-library#9458 ·
Maintainer thường phản hồi trong vòng 1 ngày